清理跨行分布的数据帧数据

2024-10-16 20:51:05 发布

您现在位置:Python中文网/ 问答频道 /正文

前言:我对使用Python还不熟悉。你知道吗

我正在清理一个数据分布在多行的文件。我正在努力寻找一个解决方案,将多个文本字符串连接到一个单元格。.csv数据如下所示:

name,date,description

bundy,12-12-2017,good dog

,,smells kind of weird

,,needs to be washed

每个条目之间也有一到两个空行。你知道吗

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

#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,则执行该逻辑,但停止。我不知道怎么做,或者有没有更有效的方法。你知道吗

我该怎么做才能得到最终的结果?我无法找到正确的方法来迭代或连接我希望的方式。你知道吗


Tags: 文件to数据方法shift方式description解决方案
2条回答

我不太明白你的意思。我把文本保存为csv文件,并成功地将其读入数据框。这不是你想要的吗?你知道吗

>>> 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
'''
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

相关问题 更多 >