我有一个 Pandas Dataframe,其中有一列,如下所示:
Car_Make
0 2017 Abarth 124 Spider ManualConvertible
1 2017 Abarth 124 Spider AutoConvertible
2 2017 Abarth 124 Spider ManualConvertible
3 2017 Abarth 124 Spider AutoConvertible
4 2017 Abarth 595 ManualHatch
5 2017 Abarth 595 AutoHatch
三个问题:
1 如何以相反的顺序保存panda中的拆分数据?- 这解决了我的问题,但我不知道它是如何或为什么起作用的 - 有人可以向我解释一下吗?我讨厌在不理解其原理的情况下复制粘贴
df['Car_Make'].apply(lambda x:pd.Series(x.split()[::-1]))
2 我尝试使用用户定义的函数(我可以再次使用)复制它,但它似乎不起作用(任何帮助理解为什么以及将 Lambda 函数转换为用户的正确方法 -定义函数
def f(x):
df[x] = pd.Series(x.split()[::-1])
return df
3 有没有更好的方法来按空格反向分割该列?
我尝试过使用正则表达式,它有效,但不是在所有行上,因为您可以看到第 4 行和第 5 行与上面略有不同。
任何帮助将不胜感激。
谢谢,
阿德里安
下面就你的三个问题来解答一下:
1)为什么df['Car_Make'].apply(lambda x:pd.Series(x.split()[::-1]))
work?
分解一下:
-
df['Car_Make']
- 包含您要操作的数据的列
-
.apply()
- a pandas
DataFrame 和 Series 方法,将函数应用于 DataFrame 中的每一列或每一行,或 Series 中的每一行。
-
lambda x:
- 将应用的函数.apply()
系列的每一行的方法。x
表示记录对象,在您的情况下是包含Car_Make
条目。
-
pd.Series()
- 这会将其中的值转换为pandas
Series.
-
x.split()
- 如第 3 点所述,x
是你的字符串对象,并且split()
是一个字符串方法,当不带参数传递时,默认按空格分割字符串并将每个分割对象返回到列表中。
-
[::-1]
- 一个方便的列表迭代器,可以反转列表,例如由x.split()
。列表迭代的语法是[start_index:end_index:step]
。使用 -1 步向后迭代列表。
将所有这些放在一起,该代码将迭代中的每条记录df['Car_Make']
,分割它们,反转分割项的顺序,并将反转的列表作为 pandas Series 对象返回。
2)用定义的函数复制它。
你真的很接近,只是该函数需要将行/记录作为其参数,并且需要在.apply()
方法。你想要做的是更换lambda x
,而不是它的应用方式。
使用您目前拥有的:
def f(x):
return pd.Series(x.split()[::-1])
df['Car_Make'].apply(f)
3)有更好的方法吗?
如果您想分割一个字符串,然后反转项目的顺序,不,这是一个很好的方法。如果只想从右侧开始分割字符串的某个部分,那么rsplit()
是一个好方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)