有没有办法在不满足条件的情况下替换避免 nan 的值?
Is there a way to replace values avoiding nan where the condition is not met?
我正在尝试替换噪声值 (',') 以将数据框列转换为数字列。当 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(',','')
和returns:
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
您需要在 replace
上选择 regex=True
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
我正在尝试替换噪声值 (',') 以将数据框列转换为数字列。当 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(',','')
和returns:
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
您需要在 replace
regex=True
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