前言:我是使用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,则停止。我无法弄清楚如何做到这一点,或者是否有更有效的方法来做到这一点。
我需要做些什么来达到最终结果?我无法按照我希望的方式找出正确的迭代或连接方式。
答案 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)