繁体   English   中英

使用 Python 从 dataframe 用逗号替换点

[英]Replacing dot with comma from a dataframe using Python

我有一个 dataframe 例如df:

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

我用了:

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

或者

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

结果:

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

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


查看我所拥有的:

数据框到excel

预期成绩:

在此处输入图像描述

感谢@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()

我不是在 a.csv 文件中导出 dataframe 而是在 an.xlsx 文件中导出

dataframe 从何而来——它是如何产生的? 它是从 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)

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

df.dtypes

output 是什么?

我想你的列是数字而不是字符串,对吧? 毕竟,如果它们是数字,它们应该这样存储在您的 dataframe 中。

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

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

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

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

Also look here for how to change decimal separators in Excel: https://www.officetooltips.com/excel_2016/tips/change_the_decimal_point_to_a_comma_or_vice_versa.html

更新

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

如果您尝试将列转换为浮点数会发生什么?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM