使用 Python 从数据框中用逗号替换点

Posted

技术标签:

【中文标题】使用 Python 从数据框中用逗号替换点【英文标题】:Replacing dot with comma from a dataframe using Python 【发布时间】:2021-05-17 04:30:19 【问题描述】:

我有一个数据框,例如 df :

我正在尝试用逗号替换点以便能够在 excel 中进行计算。

我用过:

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

df = df.apply(lambda x: x.str.replace('.', ','))

结果:

没有任何变化,但我在执行结束时收到他的警告,没有错误:

FutureWarning:正则表达式的默认值将从 True 变为 在未来的版本中为假。另外,单字符正则 当 regex=True 时,表达式将被视为文字字符串。


查看我所拥有的:

预期结果:

感谢@Pythonista 匿名更新问题以获取更多信息:

print(df.dtypes)

返回:

Date         object
Open         object
High         object
Low          object
Close        object
Adj Close    object
Volume       object
dtype: object

我正在使用 to_excel 方法提取数据:

df.to_excel()

我不是在 .csv 文件中导出数据框,而是在 .xlsx 文件中

【问题讨论】:

查看这个答案:***.com/a/40083822/10737778 使用inplace=True 或将结果分配到另一个变量中。 【参考方案1】:

数据框来自哪里 - 它是如何生成的?是从 CSV 文件导入的吗?

如果您将代码应用于字符串列,只要您记得这样做,您的代码就可以工作 df = df.apply() 而不仅仅是 df.apply() ,例如:

import pandas as pd
df = pd.DataFrame()
df['a'] =['some . text', 'some . other . text']
df = df.apply(lambda x: x.str.replace('.', ','))
print(df)

但是,您尝试使用数字而不是字符串来执行此操作。 准确地说,另一个问题是:你的数据框的 dtypes 是什么? 如果你输入

df.dtypes

输出是什么?

我认为您的列是数字而不是字符串,对吧?毕竟,如果它们是数字,则应该将它们按原样存储在您的数据框中。

下一个问题:你是如何将此表导出到 Excel 中的?

如果您要保存 csv 文件,pandas 的 to_csv() 方法有一个 decimal 参数,可让您指定小数分隔符(通常在英语世界中为点,在许多国家/地区为逗号)在欧洲大陆)。查找syntax。

如果您使用 to_excel() 方法,则无关紧要,因为 Excel 应在内部将其视为数字,以及如何显示它(无论是用点还是逗号作为小数分隔符)通常取决于选项在您的计算机中设置。

请说明您如何导出数据以及在 Excel 中打开数据时会发生什么:Excel 是否将其视为字符串?或者作为数字,但您希望看到不同的小数分隔符?

还可以在这里查看如何在 Excel 中更改小数点分隔符:https://www.officetooltips.com/excel_2016/tips/change_the_decimal_point_to_a_comma_or_vice_versa.html

更新

OP,您还没有解释数据框的来源。您是否从外部来源导入它?您自己创建/计算它吗? 列是对象的事实让我认为它们要么存储为字符串,要么有些行是数字的,有些不是。

如果您尝试将列转换为浮点数会怎样?

df['Open'] = df['Open'].astype('float64')

如果整个列应该是数字但不是,那么首先清理您的数据。

第二个问题:当您使用 Excel 打开刚刚创建的文件时会发生什么? Excel 显示逗号​​,但 Excel 使用什么字符来分隔小数取决于 Windows/Mac/Excel 设置,而不是 pandas 创建文件的方式。您是否尝试过我上面提供的链接,您可以更改 Excel 显示小数的方式吗?另外,Excel 将这些数字视为数字还是字符串?

【讨论】:

您好,非常感谢您的回答,我根据您的回答更新了我的问题。所以是的,我想对某些列使用数字,对其他列使用字符串。 df['Open'] = df['Open'].astype('float64') 解决问题。非常感谢您的宝贵时间。我希望看到我的下一个问题。 我的荣幸。作为一般规则,您应该始终检查数据类型是否符合您的预期。而且,在导入日期时,不要依赖 dayfirst ,即 pandas 猜测日期格式,而是始终提供你自己的,以避免这个讨厌的错误:***.com/questions/55309199/…

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

如果是葡萄牙语,如何在 EditText 中用点替换逗号

在 Linux 的文本文件中用逗号替换空格

用 .csv 文件中的 VBA 仅在 3 列中用分号替换逗号

在 Google 表格中用逗号替换数字小键盘产生的小数点

如何在巨大的数据框中用零替换 NaN 值?

在 Python 中用 nan 替换浮点列中的点