使用Python将数据帧中的点替换为逗号

使用Python将数据帧中的点替换为逗号,python,excel,pandas,dataframe,replace,Python,Excel,Pandas,Dataframe,Replace,我有一个数据帧,例如df: 我正试图用逗号替换点,以便能够在excel中进行计算 我用过: df = df.stack().str.replace('.', ',').unstack() 或 结果: 没有任何变化,但我在执行结束时收到了他的警告,没有错误: FutureWarning:正则表达式的默认值将从True更改为 在将来的版本中为False。此外,单字符规则 当regex=True时,表达式将不会被视为文字字符串 对我拥有的东西的看法: 预期成果: 更新问题以获取更多信息,感谢@

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

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

我用过:

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

结果:

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

FutureWarning:正则表达式的默认值将从True更改为 在将来的版本中为False。此外,单字符规则 当regex=True时,表达式将不会被视为文字字符串


对我拥有的东西的看法:

预期成果:

更新问题以获取更多信息,感谢@Pythonista anonymous:

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文件中导出数据帧。数据帧来自哪里?它是如何生成的?它是从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)
但是,您正在尝试使用数字而不是字符串来执行此操作。 确切地说,另一个问题是:数据帧的数据类型是什么? 如果你打字

df.dtypes
输出是什么

我想你的列是数字而不是字符串,对吗?毕竟,如果它们是数字,那么应该将它们存储在数据帧中

下一个问题:如何将此表导出到Excel

如果要保存csv文件,pandas的
to_csv()
方法有一个
decimal
参数,用于指定小数的分隔符(通常,英语国家使用点,欧洲大陆许多国家使用逗号)。查表

如果您使用的是to_excel()方法,这不重要,因为excel应该在内部将其视为一个数字,并且它如何显示(是否使用点或逗号作为十进制分隔符)通常取决于计算机中设置的选项

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

还可以在此处查看如何在Excel中更改小数分隔符:

更新 OP,您还没有解释数据帧来自何处。您是否从外部源导入它?你自己创造/计算吗? 列是对象这一事实使我认为它们要么存储为字符串,要么可能有些行是数字的,有些行不是

如果尝试将列转换为float,会发生什么情况

df['Open'] = df['Open'].astype('float64')
如果整个列应该是数字,但不是,那么从清理数据开始


第二个问题:使用Excel打开刚创建的文件时会发生什么情况?Excel显示逗号,但Excel使用哪个字符分隔小数取决于Windows/Mac/Excel设置,而不是pandas创建文件的方式。你试过我上面的链接了吗?你能改变Excel显示小数的方式吗?另外,Excel是否将这些数字视为数字或字符串?

检查此答案:使用
inplace=True
或将结果赋给另一个变量。您好,非常感谢您的回答,我在您的回答后更新了我的问题。因此,是的,我想对一些列使用数字,对其他列使用字符串。df['Open']=df['Open']]。astype('float64')解决这个问题。非常感谢您抽出时间。我希望下一个问题能四处看看。我很高兴。一般来说,您应该始终检查数据类型是否符合预期。而且,在导入日期时,不要依赖于
dayfirst
,即猜测日期格式,而是始终提供自己的格式,以避免出现这种讨厌的错误:
df['Open'] = df['Open'].astype('float64')