pandas 在 Dataframe 中创建由 Dataframe 中找到的整数组成的新列

nvbavucw  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(156)

我正在使用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
qni6mghb

qni6mghb1#

在布尔掩码的帮助下交换值:

m = df['1'].str.isdigit()

df.loc[m, '1'], df.loc[m, '2'] = df.loc[m, '2'], df.loc[m, '1']
print(df)

# Output
       1   2
0   CL-1   4
1   CL-4   1
2   CL-2  15
3   CL-5   1
4  RBC-1  16
5   CL-8   4

显然,可以使用df['2'] = df['2'].astype(int)将最后一列转换为int

相关问题