python - python中csv_write.writerow的功能
问题描述
我正在使用 write_csv.writerow 将数据写入 CSV。但是我在单独的 Ex: 中得到每一个数字或字母: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)))
请让我知道我哪里出错了?谢谢
解决方案
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
pandas中也有方法:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html
推荐阅读
- ruby - `initialize':没有将 String 隐式转换为 Integer (TypeError)
- terminal - Visual Studio Code,如何从 cmd.exe 切换到 node
- c# - C# 新字典
() 是字典 - javascript - 如何传递父组件的所有子元素?
- android - 我无法解码这个 Base64 字符串
- java - java中的哪个ORM用于并行处理?
- python - 是否可以以多处理方式在许多训练集上训练 keras 模型?
- raspberry-pi - 通过 VirtualBox 在 RaspianOS (Debian64) 上的 webgl 的速度/性能是否与实际的 RaspberryPi 相同?
- android - 如果没有 ViewModel,MediatorLiveData 将无法工作
- python - 我只想按“小时:分钟”显示时间。"d = datetime.strptime("10:30", "%H:%M")" 不起作用