【问题标题】:Cleaning DataFrame- data spread across rows清理 DataFrame - 跨行分布的数据
【发布时间】:2018-03-27 05:52:21
【问题描述】:

前言:我是 Python 新手。

我正在清理一个数据分布在多行中的文件。我正在努力寻找将多个文本字符串连接到单个单元格的解决方案。 .csv 数据与此类似:

名称、日期、描述

邦迪,2017 年 12 月 12 日,好狗

,,闻起来有点怪

,,需要清洗

每个条目之间也有一两行空白。

用于“描述”的行数不一致。有时它只有一个细胞,有时多达四个。理想的输出将这些多行转换为单行有用数据,而不会浪费所有空间。我想也许我可以通过将数据复制到几列,向上移动,然后以某种方式迭代来创建一系列掩码。不过,我还没有找到与我正在尝试做的事情相匹配的解决方案。这是我目前所处的位置:

#Add column f description stuff and shift up a row for concatenation
DogData['Z'] = DogData['Y'].shift(-1)
DogData['AA'] = DogData['Z'].shift(-1)
DogData['AB'] = DogData['AA'].shift(-1)

#create series checks to determine how to concat values properly
YNAs = DogData['Y'].isnull()
ZNAs = DogData['Z'].isnull()
AANAs = DogData['AA'].isnull()

这里的想法基本上是我将遍历列“Y”,检查列“Z”中的同一行是否为 NA 或有值,如果有则连接。如果没有,只需使用“Y”中的值。携带该逻辑,但如果在任何后续列中遇到 NA 则停止。我不知道该怎么做,或者是否有更有效的方法来做到这一点。

我必须做什么才能获得最终结果?我想不出以我希望的方式进行迭代或连接的正确方法。

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:
    '''
    name,date,description
    
    bundy,12-12-2017,good dog
    
    ,,smells kind of weird
    
    ,,needs to be washed
    '''
    
    df = pd.read_clipboad()
    

    df.fillna(method = 'ffill').groupby([
        'name',
        'date'
    ]).description.apply(lambda x : ', '.join(x)).to_frame(name = 'description')
    

    【讨论】:

    • 不完全。目标是有bundy的单排,12-12-2017,“好狗,闻起来有点奇怪,需要洗”。将额外的三行描述连接到第一行。
    • 快到了。随着描述计数,即使在放置另一个 0 之后它也会不断增加 - 这似乎阻止了我的输出与您的输出相同。基本上,即使在到达下一个名称/日期包之后,第一行的 description_count 也从 0 开始 - 但随后会跳回到它离开的地方。所以 Bundy 去了 0、1、2,但下一条狗显示 0、3、4、5。我希望这不会太难理解 - 不确定如何或是否可以在 cmets 中显示表格和东西。
    • 试试新代码。不使用cumcount()
    • 做到了。非常感谢您的帮助!
    • 完美在线简洁
    【解决方案2】:

    我不确定我是否完全按照您的意思。我获取了该文本,将其保存为 csv 文件,并成功将其读入 pandas 数据框。这不是你想要的吗?

    >>> import pandas as pd
    >>> df = pd.read_csv('test.csv')
    >>> df
        name        date           description
    0  bundy  12-12-2017              good dog
    1    NaN         NaN  smells kind of weird
    2    NaN         NaN    needs to be washed
    

    【讨论】:

    • 目标是去掉多余的行并连接描述中的文本,所以最终结果看起来更像第 0 行,其中描述会显示“好狗,闻起来有点奇怪,需要待洗”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2015-05-26
    相关资源
    最近更新 更多