Python 用点熊猫替换逗号
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/40083266/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Replace comma with dot Pandas
提问by Juliana Rivera
Given the following array, I want to replace commas with dots:
鉴于以下数组,我想用点替换逗号:
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)
I've been trying different ways but I can't figure out how to do this.
Also, I have imported it as a pandas
DataFrame but can't apply the function:
我一直在尝试不同的方法,但我不知道如何做到这一点。另外,我已将其作为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(',','.')))
Any suggestions how to solve this?
任何建议如何解决这个问题?
回答by EdChum
You need to assign the result of your operate back as the operation isn't inplace, besides you can use apply
or stack
and unstack
with vectorised str.replace
to do this quicker:
您需要将操作的结果分配回,因为操作没有就位,此外您可以使用apply
orstack
和unstack
vectorizedstr.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
the key thing here is to assign back the result:
这里的关键是分配回结果:
df = df.stack().str.replace(',','.').unstack()
df = df.stack().str.replace(',','.').unstack()
回答by atomh33ls
If you are reading in with read_csv
, you can specify how it interprets decimals with the decimal
parameter.
如果您正在读入read_csv
,您可以使用decimal
参数指定它如何解释小数。
e.g.
例如
your_df = pd.read_csv('/your_path/your_file.csv',sep=';',decimal=',')
From the man pages:
从手册页:
thousands : str, optional Thousands separator.
decimal : str, default ‘.' Character to recognize as decimal point (e.g. use ‘,' for European data).
千位:str,可选千位分隔符。
十进制:str,默认'.' 识别为小数点的字符(例如,对欧洲数据使用“,”)。