我正在使用ezdxf从AutoCAD中提取数据。当值被放置在数据框中时,数据类型是对象。但是,总是有两列,其中一列可以包含整数或字符串。总是会发生这样的情况:在一行上,其中一列包含整数,另一列包含字符串。
目标是将数据分成两列,一列包含int值,另一列包含string。int是string的值,因此排序顺序很重要。
我试过使用.isdigit()来获取true/false,然后使用if true将选中的列的值复制到新列。我也试过使用lambda函数,但似乎也不能让它工作。
sdf3 = pd.DataFrame(columns=['1', '2'])
# Loop to populate Data frame
# then after it is populated attempt to group data
print(sdf3.to_string())
sdf3.loc[:, 'first'] = sdf3.loc[:, '1'].astype(str).str.strip().str.isdigit()
sdf3.loc[:, 'second'] = sdf3.loc[:, '2'].astype(str).str.strip().str.isdigit()
sdf3['S_QTY'] = sdf3.apply(lambda x: x['1'] if x['first'].astype(str).str.contains('True') else
x['2'], axis=1)
print(sdf3.to_string())
1 2
0 4 CL-1
1 CL-4 1
2 CL-2 15
3 CL-5 1
4 RBC-1 16
5 CL-8 4
1 2 first second
0 4 CL-1 True False
1 CL-4 1 False True
2 CL-2 15 False True
3 CL-5 1 False True
4 RBC-1 16 False True
5 CL-8 4 False True
1条答案
按热度按时间qni6mghb1#
在布尔掩码的帮助下交换值:
显然,可以使用
df['2'] = df['2'].astype(int)
将最后一列转换为int