我的数据框看起来像下面的垃圾栏:
d = {'Junk Column' : ['1', '2', '3', '4', '5', '6', '7', 'J', 'K'],
'Good Column' : [1, 2, 3, 4, 5, 6, 7, 'J', 'K']}
df = pd.DataFrame(d)
Good Column Junk Column
0 1 1
1 2 2
2 3 3
3 4 4
4 5 5
5 6 6
6 7 7
7 J J
8 K K
我的目标是进入Good Column。不同之处在于'1'已转换为1。
df['Junk Column'] = df['Junk Column'].astype(int)
失败,因为'J'和'K'无法转换为整数..
我已成功使用以下方法将垃圾栏转换为好列:
def clean_out_strings(value):
try:
return int(value)
except ValueError:
return value
df['Junk Column'] = df['Junk Column'].apply(clean_out_strings)
但是,由于我的数据帧大于1mil,并且每天都在增长,因此这很慢。我想看看有人有更快的方法来做到这一点。
答案 0 :(得分:0)
这可能会更快:
>>> df
good junk
0 1 1.25 # a float
1 2 2 # already an int
2 3 +3
3 4 -4 # signed
4 5 5 # leading/trailing space
5 6 6
6 7 7
7 J J 3
8 K K5
>>> df['junk'].values
array([1.25, 2, '+3', '-4', ' 5 ', '6', ' 7 ', 'J 3', 'K5'], dtype=object)
>>> i = df['junk'].str.strip().str.match(r'[+-]?\d+', na=True)
>>> df.loc[i, 'junk'] = df.loc[i, 'junk'].astype('int')
>>> df['junk'].values
array([1, 2, 3, -4, 5, 6, 7, 'J 3', 'K5'], dtype=object)