首页 > 解决方案 > 根据没有特定值的列选择行并使用字典 - Python & Excel - 大数据

问题描述

我有超过一百万条记录和 700 列以类似 csv 的格式存储。每条记录代表每个人,每列中的所有值代表他对调查问题的回答。

所以,我给出了一段带有两个列的示例输入数据代码

df = pd.DataFrame({'Person_id':[1,2,3,4,5],
'Gender':[np.nan,np.nan,'1.Male','2.Female', np.nan],
               'Ethnicity':['1.Chinese','2.Indian','3.Malay',np.nan,np.nan]})

基于上述代码的输入数据框如下图所示

在此处输入图像描述

从上面的数据集中,我们可以看到 person_id = 1,只有 Ethnicity 列的值。同样,person_id = 3,具有性别和种族列的值

这是字典的使用,如下图所示

df = pd.DataFrame({'0':['Gender','Ethnicity','Location','Age_at_test','Date of Birth'],
 '1':['gen','eth','loc','age','dob']})

在此处输入图像描述

所以,我想在新的 excel 表中创建一个输出,如下图所示

在此处输入图像描述

Observation_id - 只是一个主键之类的东西。所有记录都是唯一的

从截图可以看出,没有 person_id = 5,因为他的两个值都是 NA。因此,我想保留不是 NA 的记录。例如,Person_id = 3 有两条记录,因为他有两列的值。

因此,例如,如果 person_id = 45 有所有 700 列的数据,我可能有 700 行。

同样,如果 person_id = 47 有 700 列的所有 NA's/empty,我将在输出表中没有他的条目。

本质上,我想转换数据,如屏幕截图所示。这里的独特之处不是通常的dropna,我想保留记录(行)但只删除人的列(特征)。

你能帮我看看如何完成这个端到端的数据转换吗?

解决此问题的任何解决方案都会有所帮助。我可以管理它以从那里扩展它或将我的数据分成块并逐部分进行。

标签: pythonpython-3.xpandasdataframe

解决方案


要删除所有列都包含 NaN 的行,请执行以下操作:

df = df.dropna(how='all', axis=0)

推荐阅读