Python/Pandas:如何在列名中添加双引号?

4

我需要在我的脚本生成的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"' - hpaulj
2个回答

8

您可以在斜杠前后添加引号:

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关键字参数:
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'

1
Pandas 不使用 s21,应该使用 object,那是 numpy 还是旧版本的 pandas? - Andy Hayden
我的Pandas版本是16.2,但我还没有将Numpy导入到脚本中。 - mattrweaver
1
@mattrweaver 明显有些可疑的事情正在发生,pandas 绝不应该使用 s21(如果你正在读取 csv 文件,则应该避免... 你是如何导入数据的/是否通过返回 numpy 数组的库运行它? - Andy Hayden
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Andy Hayden
1
@mattrweaver 太好了!啊哈,你需要先将数字列转换为字符串,然后才能添加字符串(可能只有Python 3可以这样做?)https://dev59.com/1mEh5IYBdhLWcg3wyGHy 所以 '"' + df.ID.astype(str) + '"' - Andy Hayden
显示剩余11条评论

1
使用 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 写入器具有类似或更多的控制程度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接