python/pandas:需要帮助为列添加双引号
Posted
技术标签:
【中文标题】python/pandas:需要帮助为列添加双引号【英文标题】:python/pandas:need help adding double quotes to columns 【发布时间】:2016-02-08 02:25:10 【问题描述】:我需要在脚本生成的 csv 文件中的特定列中添加双引号。
下面是我想到这样做的愚蠢方式。对于这两个固定宽度的字段,它可以工作:
df['DATE'] = df['DATE'].str.ljust(9,'"')
df['DATE'] = df['DATE'].str.rjust(10,'"')
df['DEPT CODE'] = df['DEPT CODE'].str.ljust(15,'"')
df[DEPT CODE'] = df['DEPT CODE'].str.rjust(16,'"')
对于以下字段,它没有。它具有可变长度。因此,如果该值小于标准的 6 位数字,我会得到额外的双引号:"5673"""
df['ID'] = df['ID'].str.ljust(7,'"')
df['ID'] = df['ID'].str.rjust(8,'"')
我试过zfill,但列中的数据是一个系列——我运行时得到“pandas.core.series.Series”
print type(df['ID'])
我无法使用 astype 将其转换为字符串。我不确定为什么。我没有导入numpy。
我尝试使用 len() 来获取 ID 号的长度并将其作为第一个参数传递给 str.ljust 和 str.rjust,但我认为它挂断了不是字符串的数据。
是否有一种更简单的方法可以根据需要应用双引号,或者 zfill 将成为可行的方法?
【问题讨论】:
如果用np.savetxt
写csv
我会试试fmt='"%s"'
。
【参考方案1】:
您可以在之前/之后添加语音标记:
In [11]: df = pd.DataFrame([["a"]], columns=["A"])
In [12]: df
Out[12]:
A
0 a
In [13]: '"' + df['A'] + '"'
Out[13]:
0 "a"
Name: A, dtype: object
分配这个:
In [14]: df['A'] = '"' + df.A + '"'
In [15]: df
Out[15]:
A
0 "a"
如果是导出到 csv,你可以使用 quoting kwarg:
In [21]: df = pd.DataFrame([["a"]], columns=["A"])
In [22]: df.to_csv()
Out[22]: ',A\n0,a\n'
In [23]: df.to_csv(quoting=1)
Out[23]: '"","A"\n"0","a"\n'
【讨论】:
我收到一个错误“TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('S21') dtype('S21') dtype('S21')” 我在尝试时遇到了这个错误 -- df['A'] = '"' + df.A + '"' Pandas 不使用 s21,应该使用 object,是 numpy 还是旧版 pandas? @mattrweaver 肯定有问题,pandas 永远不应该使用 s21(如果你正在阅读 csv,那么它是 avoided...你是如何导入数据的/你在运行它吗?一个返回 numpy 数组的库? @mattrweaver 太棒了!啊哈,您需要先将数字列转换为字符串,然后才能添加字符串(可能只有 python 3?)***.com/q/22005911/1240268 所以'"' + df.ID.astype(str) + '"'
【参考方案2】:
使用numpy
,而不是pandas
,您可以在保存到 csv 文件时指定格式化方法。作为一个非常简单的例子:
In [209]: np.savetxt('test.txt',['string'],fmt='%r')
In [210]: cat test.txt
'string'
In [211]: np.savetxt('test.txt',['string'],fmt='"%s"')
In [212]: cat test.txt
"string"
我希望pandas
csv 编写器具有类似程度的控制,如果不是更多的话。
【讨论】:
以上是关于python/pandas:需要帮助为列添加双引号的主要内容,如果未能解决你的问题,请参考以下文章
Python pandas:对分组的第一行和最后一行应用操作并将结果添加为列的最佳方法是啥?