python/pandas:需要帮助为列添加双引号

python/pandas:need help adding double quotes to columns

我需要为我的脚本生成的 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 将成为可行的方法?

您可以在之前/之后添加语音标记:

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,您可以使用引用 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'

使用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 编写器具有类似程度的控制,如果不是更多的话。