Adr*_*anC 2 python split pandas
我有一个 Pandas 数据框,其中有一列如下所示:
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
Run Code Online (Sandbox Code Playgroud)
三个问题:
1如何以相反的顺序在熊猫中保存拆分数据?- 这解决了我的问题,但我不知道它是如何或为什么起作用的 - 有人可以向我解释一下吗?我讨厌复制粘贴而不理解它为什么起作用
df['Car_Make'].apply(lambda x:pd.Series(x.split()[::-1]))
Run Code Online (Sandbox Code Playgroud)
2 我尝试使用用户定义的函数(我可以再次使用)复制它,但它似乎不起作用(任何帮助理解为什么以及将 Lambda 函数转换为用户的正确方法 -定义函数
def f(x):
df[x] = pd.Series(x.split()[::-1])
return df
Run Code Online (Sandbox Code Playgroud)
3 有没有更好的方法可以反向按空格拆分此列?
我曾尝试使用有效的正则表达式,但不是在所有行上,因为您可以看到第 4 行和第 5 行与上面的略有不同。
任何帮助将不胜感激。
谢谢,阿德里安
这是对您的三个问题的一个镜头:
1)为什么df['Car_Make'].apply(lambda x:pd.Series(x.split()[::-1]))有效?
分解一下:
df['Car_Make'] - 要操作的数据所在的列.apply()-pandas将函数应用于 DataFrame 中的每一列或每一行或系列中的每一行的DataFrame 和 Series 方法。lambda x:- 该方法将应用于.apply()系列的每一行的函数。x表示记录对象,在您的情况下是包含Car_Make条目的字符串。pd.Series()- 这会将其中的值转换为pandas系列。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)
Run Code Online (Sandbox Code Playgroud)
3)有没有更好的方法?
如果你想拆分一个字符串然后颠倒项目的顺序,不,这是一个很好的方法。如果你只想从右边开始拆分字符串的某个部分,那么rsplit()是一个很好的方法。