Python更改特定列和行中的数据框值



我有一个从未格式化的csv生成的数据框。所以我需要格式化一些数据(例如,有一些字符串为12.323,03为浮点格式,我试图将它们转换为12323.03用于将字符串转换为python中的float)我试着这样做:
for column in data:
if(data[column].name != 'blabla' and data[column].name != 'otherblabla'):
for row_value in data[column]:
if type(row_value) == str:
float_format = row_value.replace('.','').replace(',','.')
row_value = row_value.replace(row_value, float_format)

浮动格式:转换字符串"12.323,03"12323.03"。但是行值不受影响。我错过了什么?

要影响新值,必须使用

定位它df。Loc [row_index,column_name] = row_value

请尝试枚举。

for row_index, row_value in enumerate(data_column):

这里有一个例子来理解它:

df = pd.DataFrame({'A':[1,2,3,4],'B':[5,6,7,8]})
print('Before change')
print(df)
for i,j in enumerate(df['B']):
if j == 6:
df.loc[i,'B'] = 4
print('Afetr Change')
print(df)

变量row_value是原始df中不引用df位置的行/列对的单个值。正如另一个答案在您的方法中指出的那样,您需要找到值以便更改df。

另外,我想提到的是,row_value的第二个replace可以简单地用row_value = float_format代替。此外,我与您分享一种使用apply的方法,我认为它更干净,您可能会觉得有用:

df = pd.DataFrame(
{
'c1': ['100,12', 1.230, '30.000,4'], 
'c2': ['5.367,46', '10', 7.3],
'c3': ['a', 'b', 'c']
}
)
cols = ['c1', 'c2']
for col in cols:
df[col] = df[col].apply(
lambda x: float(x.replace('.','').replace(',','.')) if type(x) == str else x
)

结果是:

c1       c2 c3
0    100.12  5367.46  a
1      1.23    10.00  b
2  30000.40     7.30  c
c1    float64
c2    float64
c3     object
dtype: object

相关内容

  • 没有找到相关文章

最新更新