我有一个227x4的数据框,其中包含国家名称和数字值需要清理(整理?)。
以下是数据框的抽象表示:
如何在不触及国家名称的情况下,将所有列中的字符串值替换为
我尝试使用布尔掩码:
我查看了几个和我的问题相关的问题([1], [2], [3], [4], [5], [6], [7], [8]),但没有找到一个能回答我的问题的。
以下是数据框的抽象表示:
import pandas as pd
import random
import string
import numpy as np
pdn = pd.DataFrame(["".join([random.choice(string.ascii_letters) for i in range(3)]) for j in range (6)], columns =['Country Name'])
measures = pd.DataFrame(np.random.random_integers(10,size=(6,2)), columns=['Measure1','Measure2'])
df = pdn.merge(measures, how= 'inner', left_index=True, right_index =True)
df.iloc[4,1] = 'str'
df.iloc[1,2] = 'stuff'
print(df)
Country Name Measure1 Measure2
0 tua 6 3
1 MDK 3 stuff
2 RJU 7 2
3 WyB 7 8
4 Nnr str 3
5 rVN 7 4
如何在不触及国家名称的情况下,将所有列中的字符串值替换为
np.nan
?我尝试使用布尔掩码:
mask = df.loc[:,measures.columns].applymap(lambda x: isinstance(x, (int, float))).values
print(mask)
[[ True True]
[ True False]
[ True True]
[ True True]
[False True]
[ True True]]
# I thought the following would replace by default false with np.nan in place, but it didn't
df.loc[:,measures.columns].where(mask, inplace=True)
print(df)
Country Name Measure1 Measure2
0 tua 6 3
1 MDK 3 stuff
2 RJU 7 2
3 WyB 7 8
4 Nnr str 3
5 rVN 7 4
# this give a good output, unfortunately it's missing the country names
print(df.loc[:,measures.columns].where(mask))
Measure1 Measure2
0 6 3
1 3 NaN
2 7 2
3 7 8
4 NaN 3
5 7 4
我查看了几个和我的问题相关的问题([1], [2], [3], [4], [5], [6], [7], [8]),但没有找到一个能回答我的问题的。