gpt4 book ai didi

Python pandas 转换对象列中的单个值

转载 作者:太空宇宙 更新时间:2023-11-03 21:48:11 25 4
gpt4 key购买 nike

解决如下

问题:无法.groupby()排序,因为单个值是string类型对象。 Data InIndex 5ColA 10 处的值是问题所在。 ColAIndex 5 处的值 10 是一个字符串对象。 pd.to_numeric() 如果仅按该列排序,则可以正确排序该列。

问题:ColA中的单个值可以转换吗?

方法:

ind = pd.to_numeric(df['ColA'], errors='coerce').fillna(999).astype(int).argsort()
df = df.reindex(ind)
df = df.groupby(df.ColA).apply(pd.DataFrame.sort_values, 'ColB')
df = df.reset_index(drop=True)

数据位于:

Index     ColA     ColB     ColC
0 2 14-5 MumboJumbo
1 4 18-2 MumboJumbo2
2 2 24-5 MumboJumbo3
3 3 23-8 MumboJumbo4
4 2 13-6 MumboJumbo5
5 10 86-1 MumboJumbo6
6 10 42-1 MumboJumbo7
7 2 35-6 MumboJumbo8
8 Load NaN MumboJumbo9

所需输出:

Index     ColA     ColB     ColC
0 2 13-6 MumboJumbo5
1 2 14-5 MumboJumbo
2 2 24-5 MumboJumbo3
3 2 35-6 MumboJumbo8
4 3 23-8 MumboJumbo4
5 4 18-2 MumboJumbo2
6 10 42-1 MumboJumbo7
7 10 86-1 MumboJumbo6
8 Load NaN MumboJumbo9

谢谢!

最佳答案

我不太明白问题中的问题,但您可以在 DataFrame 中选择特定值使用iloc (位置索引)或loc (标签索引)。由于您要求替换数据集中第一列第五行中的值,因此我们使用 iloc .

df.iloc[from_row:to_row,column_position]

转换值'10'ColA在第 5 行到 int('10')您只需选择它,然后更新它。

df.iloc[5:6,0] = 10
<小时/>

如果您不知道需要转换的值的位置,则 ilocloc没有帮助。

有多种方法可以将列中的所有值转换为特定的 dtype 。一种方法是使用 lambda -功能。

df[column_name].apply(lambda x: int(x))

lambda上面将会中断,因为您的数据还包含字符串 Load并且您无法将其转换为 int 。解决此问题的一种方法是向您的 lambda 添加条件.

df[column_name].apply(lambda x: int(x) if something else something)

鉴于您问题中的数据,最直接的方法是检查是否 x不是'Load' :

df[column_name].apply(lambda x: int(x) if x != 'Load' else x)

如果您的列中有大量实际字符串,这会变得很麻烦。如果您想使用lambda您可以列出实际字符串。然后检查是否 x已在列表中。

list_of_strings = ['Load', 'Road', 'Toad']
df[column_name].apply(lambda x: int(x) if x not in list_of_strings else x)

另一种方法是编写一个单独的函数来管理使用 try/catch block 的转换。

关于Python pandas 转换对象列中的单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52317459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com