首页 > 解决方案 > 在python中移动缺少数据的行

问题描述

我有一个通过 python 读取的 txt 文件,如下所示:

Text File:
18|Male|66|180|Brown
23|Female|67|120|Brown
16|71|192|Brown
22|Male|68|185|Brown
24|Female|62|100|Blue

其中一行缺少数据,问题是当我将其读入数据框时,它看起来像这样:

   Age  Gender  Height Weight   Eyes
0   18    Male      66    180  Brown
1   23  Female      67    120  Brown
2   16      71     192  Brown    NaN
3   22    Male      68    185  Brown
4   24  Female      62    100   Blue

我想知道是否有一种方法可以在不移动所有列的情况下移动丢失数据的行。这是我到目前为止所拥有的:

import pandas as pd

df = pd.read_csv('C:/Documents/file.txt', sep='|', names=['Age','Gender', 'Height', 'Weight', 'Eyes'])

df_full = df.loc[df['Gender'].isin(['Male','Female'])]

df_missing = df.loc[~df['Gender'].isin(['Male','Female'])]

df_missing = df_missing.shift(1,axis=1)

df_final = pd.concat([df_full, df_missing])

我希望只分离出缺少数据的那些,将列移动一列,然后将数据框放回没有丢失数据的数据。但我不确定如何在某个点移动列。这是我试图达到的结果:

   Age  Gender  Height Weight   Eyes
0   18    Male      66    180  Brown
1   23  Female      67    120  Brown
2   16     NaN      71    192  Brown
3   22    Male      68    185  Brown
4   24  Female      62    100   Blue

我如何完成并不重要,但我使用的文件有数千行,所以我无法单独修复它们。任何帮助表示赞赏。谢谢!

标签: pythonpandasdataframe

解决方案


RegEx 可以在这里提供帮助。

搜索 ^(\d+\|)(\d)并使用$1|$2进行替换(刚刚添加了一个垂直条,其中Gender缺少"group 1 + | + group 2"

这可以在几乎所有文本编辑器(Notepad++、VSC、Sublime 等)中完成

请参阅链接后面的示例:https ://regexr.com/50gkh


推荐阅读