【问题标题】:DataFrame String ManipulationDataFrame 字符串操作
【发布时间】:2014-12-26 18:27:03
【问题描述】:

我有一个数据框,其中有一列的数据如下所示:

AAH.
AAH.
AAR.UN
AAR.UN
AAR.UN
AAR.UN
AAV.
AAV.
AAV.

我想我需要使用 apply 方法来修剪列数据。因此,如果在句点之后有任何内容,请保持数据不变,但如果在句点之后没有任何内容,则只返回末尾没有句点的字母。我知道我可能可以使用 lambda 函数,也可以使用字符串拆分或其他方法来做到这一点,但没有太多的想法来实现它。

这是我目前所拥有的:

df.apply(lambda x: string.split('.'))

我不确定是否可以通过这种方式使用 if 语句或 lambda 函数?

任何指导表示赞赏。

【问题讨论】:

  • 最后你想收到什么?拆分返回列表,是你想要的吗?
  • 不,我真的只是想获得字符串的值,所以要么是 AAV 要么是 AAR.UN,我想我是想一次性对整个列进行矢量化

标签: python pandas lambda


【解决方案1】:

由于只有一列,您可以通过.str (docs) 来利用矢量化字符串操作:

>>> df
        0
0    AAH.
1    AAH.
2  AAR.UN
3  AAR.UN
4  AAR.UN
5  AAR.UN
6    AAV.
7    AAV.
8    AAV.
>>> df[0] = df[0].str.rstrip('.')
>>> df
        0
0     AAH
1     AAH
2  AAR.UN
3  AAR.UN
4  AAR.UN
5  AAR.UN
6     AAV
7     AAV
8     AAV

否则,您必须执行 df.applymap(lambda x: x.rstrip(".")) 之类的操作,或者下拉到 numpy char 方法。

【讨论】:

  • 实际上我有 3 列,但是如果我指定我希望它在哪个列上工作,它会不会起作用?
  • @tbonejo:是的,0 没有什么特别之处,如果你愿意的话,你可以遍历df.columns。如果您知道它们都是字符串(没有缺失值),那么applymap 方法也是一种选择。
  • 不知道为什么,但我似乎无法让它工作,因为它只是找不到密钥的错误。我没有提到的一件事是我从 xls.parse 函数中获得了 df。
  • 我认为这个不起作用的问题是这不是一个系列?
  • 一个系列。如果没有关于错误是什么的更多细节,很难提供帮助。
【解决方案2】:

您也可以使用 lambda 函数来执行此操作:

>>> L = [['AAH.'],
         ['AAR.UN'],
         ['AAR.UN'],
         ['AAV.'],
         ['AAV.']]

>>> df = pd.DataFrame(L)
>>> M = lambda x: x[0][:-1] if x[0][-1]=='.' else x[0][:]
>>> df = df.apply(M, axis=1)

>>> df
0       AAH
1    AAR.UN
2    AAR.UN
3       AAV
4       AAV

【讨论】:

    【解决方案3】:
    def change_to_date(string):
        seq = (string[:2],string[2:5],string[5:])
        return '-'.join(seq)
    
    pt['DATE'] = pt['DATE'].apply(change_to_date)
    

    我对列应用了一个简单的函数来操作所有字符串值,有点类似的问题。

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 2012-10-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      相关资源
      最近更新 更多