2017-06-06 51 views
0
import pandas as pd  
df = pd.DataFrame([["one", 1.2, "", "4,3"], 
    ["two","1,7", "2,4", 0.55], 
    ["three","", 5.4, "3,9"]], 
    columns=['a','b','c','d']) 

我如何可以替换列中的逗号b键d至点,使这些列的数字? 列(或任意数量的前导列的)应当保留不变(可以包含逗号为好)替换逗号小数点的数据帧列,使其数字

回答

2
import re  

for col in ['b', 'c', 'd']: 
    df[col] = pd.to_numeric(df[col].apply(lambda x: re.sub(',', '.', str(x)))) 
+0

谢谢,这将完成这项工作:for col in df.columns [6:]: – ronnydw

0

你可以试试这个:

df = df.set_index('a') 
df.apply(lambda x: x.str.replace(',','.')).combine_first(df).apply(lambda x:pd.to_numeric(x,errors='coerce')).reset_index() 

输出:

 a b c  d 
0 one 1.2 NaN 4.30 
1 two 1.7 2.4 0.55 
2 three NaN 5.4 3.90 

列A逗号测试

df = pd.DataFrame([["one", 1.2, "", "4,3"], 
    ["two","1,7", "2,4", 0.55], 
    ["three","", 5.4, "3,9"], 
    ["comma, here","2,1",1.2,""]], 
    columns=['a','b','c','d']) 

df = df.set_index('a') 
df2 = df.apply(lambda x: x.str.replace(',','.')).combine_first(df).apply(lambda x:pd.to_numeric(x,errors='coerce')).reset_index() 

print(df2) 

      a b c  d 
0   one 1.2 NaN 4.30 
1   two 1.7 2.4 0.55 
2  three NaN 5.4 3.90 
3 comma, here 2.1 1.2 NaN 
+0

列a应该保留并保持不变(也可以包含逗号) – ronnydw

+0

实际上我需要的是更复杂一些,前n列是文本,应该保持不变。其余列应该转换为数字,但有些单元格使用“,”作为小数点。 – ronnydw

+0

为这个小问题,但它的工作原理,但正如我所说我的问题是更通用的,有几列在DataFrame的fornt需要保持不变。最重要的是,这个解决方案看起来相当复杂,看似简单的问题 – ronnydw

相关问题