用点替换逗号 Pandas

Posted

技术标签:

【中文标题】用点替换逗号 Pandas【英文标题】:Replace comma with dot Pandas 【发布时间】:2022-01-02 06:47:17 【问题描述】:

给定以下数组,我想用点替换逗号:

array(['0,140711', '0,140711', '0,0999', '0,0999', '0,001', '0,001',
       '0,140711', '0,140711', '0,140711', '0,140711', '0,140711',
       '0,140711', 0L, 0L, 0L, 0L, '0,140711', '0,140711', '0,140711',
       '0,140711', '0,140711', '0,1125688', '0,140711', '0,1125688',
       '0,140711', '0,1125688', '0,140711', '0,1125688', '0,140711',
       '0,140711', '0,140711', '0,140711', '0,140711', '0,140711',
       '0,140711', '0,140711', '0,140711', '0,140711', '0,140711',
       '0,140711', '0,140711', '0,140711', '0,140711', '0,140711',
       '0,140711', '0,140711', '0,140711', '0,140711'], dtype=object)

我一直在尝试不同的方法,但我不知道如何做到这一点。 另外,我已将其作为pandas DataFrame 导入,但无法应用该功能:

df
      1-8        1-7
H0   0,140711   0,140711
H1     0,0999     0,0999
H2      0,001      0,001
H3   0,140711   0,140711
H4   0,140711   0,140711
H5   0,140711   0,140711
H6          0          0
H7          0          0
H8   0,140711   0,140711
H9   0,140711   0,140711
H10  0,140711  0,1125688
H11  0,140711  0,1125688
H12  0,140711  0,1125688
H13  0,140711  0,1125688
H14  0,140711   0,140711
H15  0,140711   0,140711
H16  0,140711   0,140711
H17  0,140711   0,140711
H18  0,140711   0,140711
H19  0,140711   0,140711
H20  0,140711   0,140711
H21  0,140711   0,140711
H22  0,140711   0,140711
H23  0,140711   0,140711 

df.applymap(lambda x: str(x.replace(',','.')))

有什么建议可以解决这个问题吗?

【问题讨论】:

df.applymap(lambda x: str(x.replace(',','.'))) 确实有效,将pd.__version__ == '0.18.1' 上的逗号替换为点 您分配回结果了吗? df =df.applymap(lambda x: str(x.replace(',','.'))) 另外,为每一列执行此操作会更快:df = df.apply(lambda x: x.str.replace(',','.')) 伟大的@EdChum。我没有分配回结果。顺便说一句,apply 比 applymap() 快吗? apply 按列或按行工作,applymap 对每个元素进行操作,所以在这种情况下,apply 会更快。你也可以df.stack().str.replace(',','.').unstack() 【参考方案1】:

您需要将您的操作结果分配回去,因为操作未到位,此外您可以使用applystackunstack 与矢量化str.replace 更快地执行此操作:

In [5]:
df.apply(lambda x: x.str.replace(',','.'))

Out[5]:
          1-8        1-7
H0   0.140711   0.140711
H1     0.0999     0.0999
H2      0.001      0.001
H3   0.140711   0.140711
H4   0.140711   0.140711
H5   0.140711   0.140711
H6          0          0
H7          0          0
H8   0.140711   0.140711
H9   0.140711   0.140711
H10  0.140711  0.1125688
H11  0.140711  0.1125688
H12  0.140711  0.1125688
H13  0.140711  0.1125688
H14  0.140711   0.140711
H15  0.140711   0.140711
H16  0.140711   0.140711
H17  0.140711   0.140711
H18  0.140711   0.140711
H19  0.140711   0.140711
H20  0.140711   0.140711
H21  0.140711   0.140711
H22  0.140711   0.140711
H23  0.140711   0.140711

In [4]:    
df.stack().str.replace(',','.').unstack()

Out[4]:
          1-8        1-7
H0   0.140711   0.140711
H1     0.0999     0.0999
H2      0.001      0.001
H3   0.140711   0.140711
H4   0.140711   0.140711
H5   0.140711   0.140711
H6          0          0
H7          0          0
H8   0.140711   0.140711
H9   0.140711   0.140711
H10  0.140711  0.1125688
H11  0.140711  0.1125688
H12  0.140711  0.1125688
H13  0.140711  0.1125688
H14  0.140711   0.140711
H15  0.140711   0.140711
H16  0.140711   0.140711
H17  0.140711   0.140711
H18  0.140711   0.140711
H19  0.140711   0.140711
H20  0.140711   0.140711
H21  0.140711   0.140711
H22  0.140711   0.140711
H23  0.140711   0.140711

这里的关键是返回结果:

df = df.stack().str.replace(',','.').unstack()

【讨论】:

这将是数据帧上的 NaN 整数值【参考方案2】:

如果您使用read_csv 读入,您可以使用decimal 参数指定它如何解释小数。

例如

your_df = pd.read_csv('/your_path/your_file.csv',sep=';',decimal=',')

来自man pages:

thousands : str,可选的千位分隔符。

decimal : str, 默认‘.’ 识别为小数点的字符 (例如,对欧洲数据使用​​“,”)。

【讨论】:

甜蜜!根据之前的建议,我在将数据视为字符串时遇到了错误。【参考方案3】:

如果您需要在特定列中用点替换逗号,请尝试

    data["column_name"]=data["column_name"].str.replace(',','.')

避免'str'对象没有属性'str'错误。

【讨论】:

以上是关于用点替换逗号 Pandas的主要内容,如果未能解决你的问题,请参考以下文章

HTML DOM 用点替换逗号

如何用数字中的点替换逗号(或任何替换)[重复]

用点解析双精度为逗号

在pandas数据框中搜索并替换点和逗号

PHP用逗号和空格验证数字

以逗号作为小数分隔符的数据框