如何更正python中的行值未对齐

2024-09-23 22:31:18 发布

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

我从一个格式非常糟糕的csv文件中提取了数据,并试图进行一些清理。现在一列中的值与另一列中的值不正确对应,我只需要移动一列中的值,使它们正确对应

我的数据大致如下:

df = 
   ref  name  address
1  1.2  name1  
2  1.2        address1
3  1.3  name2
4  1.3  name2
5  1.3        address2
6  1.3        address2 
7  1.4  name3
8  1.4  name3
9  1.5  name4
10 1.5        address4

这样继续下去,有时两个地址,或者三个或四个地址,大约还有一千行

理想情况下,我希望使我的数据如下所示:

df = 
   ref  name  address
1  1.2  name1 address1
3  1.3  name2 address2
4  1.3  name2 address2
5  1.4  name3
6  1.4  name3
7  1.5  name4 address4 

删除空行并将地址上移以正确对应。请让我知道,如果你有任何想法如何做到这一点,它一直给我带来很多麻烦。提前谢谢


Tags: csv数据namerefdfaddress地址格式
2条回答

给定您可以运行的数据的确切格式:

data.set_index('ref').applymap(lambda x: np.nan if x=='' else x).apply(lamdba x: x.dropna())

这首先用NaN替换所有空单元格,然后一次取一列并删除所有NaN行。然后,通过在ref(现在是索引)上进行匹配,将它们合并为数据帧

如果您的数据中已经缺少NaN值,那么它只是

data.set_index('ref').apply(lamdba x: x.dropna().reset_index())

我们可以执行groupby+shift NaN:PS您可以通过Divakar检查justify,以加快整个过程

pd.concat([ y.apply(lambda t : sorted(t,key=pd.notnull)).dropna(thresh=2) for x , y in df.groupby('ref') ])
Out[121]: 
    ref   name   address
2   1.2  name1  address1
5   1.3  name2  address2
6   1.3  name2  address2
7   1.4  name3       NaN
8   1.4  name3       NaN
10  1.5  name4  address4

相关问题 更多 >