清理DataFrame-跨行

时间:2018-03-26 18:32:44

标签: python python-3.x pandas dataframe

前言:我是使用Python的新手。

我正在努力清理数据分布在多行的文件。我很难找到将多个文本字符串连接到单个单元格的解决方案。 .csv数据看起来类似于:

  

名称,日期,描述

     

bundy,12-12-2017,好狗

     

,闻起来有点奇怪

     

,,需要清洗

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

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

#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还是有价值,如果有的话,那就是concat。如果没有,只需使用' Y'中的值。携带该逻辑,但如果在任何后续列中遇到NA,则停止。我无法弄清楚如何做到这一点,或者是否有更有效的方法来做到这一点。

我需要做些什么来达到最终结果?我无法按照我希望的方式找出正确的迭代或连接方式。

2 个答案:

答案 0 :(得分:0)

我不确定我是否完全遵循你的意思。我接受了该文本,将其保存为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

答案 1 :(得分:0)

'''
name,date,description

bundy,12-12-2017,good dog

,,smells kind of weird

,,needs to be washed
'''

df = pd.read_clipboad()

start

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

finish