我正在尝试替换嘈杂的值(','),以将数据框列转换为数字列。当str.replace用nan覆盖不包含任何逗号的所有值时,会发生问题。
以说明问题:
import pandas as pd
data = {
'transaction_number': [1344, '1,345', 1346, '1,347'],
'date': ['2018-12-01 14:03:38', '2018-12-01 12:38:12',
'2018-12-04 13:19:46', ' 2018-12-04 12:23:09']
}
df = pd.DataFrame(data)
print(df)
输出:
transaction_number date
0 1344 2018-12-01 14:03:38
1 1,345 2018-12-01 12:38:12
2 1346 2018-12-04 13:19:46
3 1,347 2018-12-04 12:23:09
我尝试过的第一件事:
df.transaction_number = df.transaction_number.replace(',', '')
#i tried this equivalet too:
df.transaction_number.replace(',', '', inplace = True)
他们都没有对数据进行任何转换(也就是说,他们什么也没做)。如果有人能告诉我为什么我会如此感激。
最后我尝试了(str方法):
df.transaction_number = df.transaction_number.str.replace(',','')
并返回:
transaction_number date
0 NaN 2018-12-01 14:03:38
1 1345 2018-12-01 12:38:12
2 NaN 2018-12-04 13:19:46
3 1347 2018-12-04 12:23:09
我不知道发生什么事情和为什么发生,我想要的结果是:
transaction_number date
0 1344 2018-12-01 14:03:38
1 1345 2018-12-01 12:38:12
2 1346 2018-12-04 13:19:46
3 1347 2018-12-04 12:23:09
请帮助并感谢您的阅读!
之所以这样,是因为您的列具有混合的数据类型。我们可以将其全部转换为字符串(使用.astype(str)
),然后应用替换。
import pandas as pd
data = {
'transaction_number': [1344, '1,345', 1346, '1,347'],
'date': ['2018-12-01 14:03:38', '2018-12-01 12:38:12',
'2018-12-04 13:19:46', ' 2018-12-04 12:23:09']
}
df = pd.DataFrame(data)
df.transaction_number = df.transaction_number.astype(str).str.replace(",","")
print(df)
输出
transaction_number date
0 1344 2018-12-01 14:03:38
1 1345 2018-12-01 12:38:12
2 1346 2018-12-04 13:19:46
3 1347 2018-12-04 12:23:09
您需要regex=True
上的选项replace
df['transaction_number'] = df.transaction_number.replace(',', '', regex=True)
Out[12]:
date transaction_number
0 2018-12-01 14:03:38 1344
1 2018-12-01 12:38:12 1345
2 2018-12-04 13:19:46 1346
3 2018-12-04 12:23:09 1347