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