Pandas 反向拆分功能

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 行与上面的略有不同。

任何帮助将不胜感激。

谢谢,阿德里安

jac*_*k6e 5

这是对您的三个问题的一个镜头:

1)为什么df['Car_Make'].apply(lambda x:pd.Series(x.split()[::-1]))有效?

分解一下:

  1. df['Car_Make'] - 要操作的数据所在的列
  2. .apply()-pandas将函数应用于 DataFrame 中的每一列或每一行或系列中的每一行的DataFrame 和 Series 方法。
  3. lambda x:- 该方法将应用于.apply()系列的每一行的函数。x表示记录对象,在您的情况下是包含Car_Make条目的字符串。
  4. pd.Series()- 这会将其中的值转换为pandas系列。
  5. x.split()- 如第 3 点所述,x是您的字符串对象,并且split()是一个字符串方法,当不带参数传递时,默认为按空格拆分字符串并将每个拆分对象返回到列表中。
  6. [::-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()是一个很好的方法。