Функциональность csv_write.writerow в python - PullRequest
0 голосов
/ 21 октября 2019

Я использую write_csv.writerow для записи данных в CSV. Но я получаю всегда одну цифру или букву в отдельном примере. Например: 123 записывается как 1,2,3 и отображается как 1 2 3. Вот код, который я использую.

with open('nan.csv','w') as out:
    csvwriter=csv.writer(out)
    csvwriter.writerow(str(df['Purchase'].var()))
    csvwriter.writerow(str(df['Purchase'].std()))
    csvwriter.writerow(str(round(df['Purchase'].skew(),2)))
    csvwriter.writerow(str(round(df['Purchase'].kurt(),1)))

Пожалуйста, дайте мне знать, где я иду не так? Спасибо

1 Ответ

0 голосов
/ 21 октября 2019

https://docs.python.org/3/library/csv.html#writer-objects говорит:

Объекты Writer (экземпляры DictWriter и объекты, возвращаемые функцией writer ()) имеют следующие открытые методы. Строка должна быть повторяемой строкой или числом для объектов Writer и ...

В вашем коде str(...) - это объект типа sting, который представляет собой что-то вроде списка, каждый элемент которого состоит из одного символа,поэтому метод writerow записывает каждый символ строки один за другим. Это поведение - то, что OP считает неожиданным.

Вместо передачи строкового объекта, передайте итерируемую из строк что-то вроде списка строк. Чтобы создать список строк, вы можете преобразовать тип df['Purchase'] в строку и затем преобразовать его значение в список.

df['Purchase'].astype(str).tolist()

пример кода:

import pandas as pd
import csv
import io

# create virtual csv file
f = io.StringIO('Purchase\n0,100\n1,200\n2,300')

# read from the csv file
df = pd.read_csv(f)
# In [41]: df
# Out[41]: 
#    Purchase
# 0         1
# 1         2
# 2         3

# create virtual file
f = io.StringIO()
writer = csv.writer(f)

# write csv
writer.writerow(df['Purchase'].astype(str).tolist())

# read from virtual file
f.getvalue()
# In [74]: f.getvalue()
# Out[74]: '100,200,300\r\n'

Существует также to_csvметод в пандах:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...