Python 3.x 如何用数据帧中列中的整数替换字符值行?
我正在处理一个大型数据集,我面临的问题是,有些列包含所有整数值,但是,由于数据集未清理,因此有一些行包含“字符”和整数。这里我试图用一个小熊猫数据帧示例来说明这个问题 我有以下数据帧: 指数 l1 l2 l3 0 1. 123 23 1. 2. Z3V 343 2. 3. 321 21 3. 4. AZ34 345 4. 5. 432 3. 你可以做:Python 3.x 如何用数据帧中列中的整数替换字符值行?,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我正在处理一个大型数据集,我面临的问题是,有些列包含所有整数值,但是,由于数据集未清理,因此有一些行包含“字符”和整数。这里我试图用一个小熊猫数据帧示例来说明这个问题 我有以下数据帧: 指数 l1 l2 l3 0 1. 123 23 1. 2. Z3V 343 2. 3. 321 21 3. 4. AZ34 345 4. 5. 432 3. 你可以做: import pandas as pd import numpy as np # setup l1, l2, l3 = [1, 2, 3, 4
import pandas as pd
import numpy as np
# setup
l1, l2, l3 = [1, 2, 3, 4, 5, 6], [123, 'Z3V', 321, 'AZ34', 432, 'Z3V'], [23, 343, 21, 345, 3, 3]
data = pd.DataFrame(zip(l1, l2, l3), columns=['l1', 'l2', 'l3'])
# find all non numeric values across the whole DataFrame
mask = data.applymap(np.isreal)
rows, cols = np.where(~mask)
# create the replacement dictionary
replacements = {k: i for i, k in enumerate(np.unique(data.values[rows, cols]), 100)}
# apply the replacements
res = data.replace(replacements)
print(res)
输出
l1 l2 l3
0 1 123 23
1 2 101 343
2 3 321 21
3 4 100 345
4 5 432 3
5 6 101 3
请注意,我添加了一个额外的行来验证Desired行为,现在data
DataFrame如下所示:
l1 l2 l3
0 1 123 23
1 2 Z3V 343
2 3 321 21
3 4 AZ34 345
4 5 432 3
5 6 Z3V 3
通过更改此行:
# create the replacement dictionary
replacements = {k: i for i, k in enumerate(np.unique(data.values[rows, cols]), 100)}
您可以根据需要更改替换值。请添加一个可以复制到文本编辑器中的数据框表示形式。100和101后面的逻辑是什么?@danimesjo added DataFramecode@TimBiegeleisen澄清了逻辑。