如何删除 pandas 数据框中的 NaN 值,其列在另一个数据框中被引用为编码值,指示缺失值或未知值

How to remove NaN values in pandas dataframe whose columns are referenced in another dataframe as encoded values indicating missing or unknown values

数据帧 1

1  C1  C2  C3  .  .  .  C85
2  
3  
4  
.
.
800000  .  .  .  .  .  .

跨行缺失值的列

0       32
100     10
200     7
300     7
400     6
1000    5
2000    3
3000    3
9000    3
12000   2
13000   1
15000   1
20000   1
30000   1
40000   1
50000   1
60000   1    

数据帧 2

attribute  missing_or_unknown
C1         [-1,X]
C2         [XX]
.          .
.          .
C85        []

缺失值按 value_Counts()

排序
[-1]        26
[-1,9]      17
[-1,0]      16
[0]         12
[]          10
[-1,0,9]     1
[-1,XX]      1
[-1,X]       1
[XX]         1

需要 Dataframe 1 是主 table,它有许多缺失值或未知值需要清理。 但是,需要通过引用数据帧 2 并使用 missing_or_unknown 列

中的那些编码指示符来确定

方法 为了能够做到这一点,我试图连接 2 个数据帧,看看是否可以将 missing_or_unknown 列添加到数据帧 1,然后才能继续并使用替换函数将这些指标替换为 np.nan

问题 当 2 个数据帧的行数不同时如何执行连接?基本上第一个数据框的列是第二个数据框中的行?

我建议您转置 Dataframe2 并将列标题替换为第一行的值,然后 concanate Dataframe1 和 Dataframe2。在此之后,您可以对结果 Dataframe 的 Row1 进行操作,以进一步将其替换为 "Nan" 值。

这是一个示例:

import pandas as pd

dummy_data1 = {
        'C1': ['11', '12', '13', '14', '15', '16', '17', '18', '19', '20'],
        'C2': ['A', 'E', 'I', 'M', 'Q', 'A', 'E', 'I', 'M', 'Q', ],
        'C3': ['B', 'F', 'J', 'N', 'R', 'B', 'F', 'J', 'N', 'R', ],
        'C4': ['C', 'G', 'K', 'O', 'S', 'C', 'G', 'K', 'O', 'S', ],
        'C5': ['D', 'H', 'L', 'P', 'T', 'D', 'H', 'L', 'P', 'T', ]}

df1 = pd.DataFrame(dummy_data1, columns = ['C1', 'C2', 'C3', 'C4', 'C5'])

dummy_data2 = {
        'attribute': ['C1', 'C2', 'C4', 'C5', 'C3', ],
        'missing_or_unknown': ['X1', 'X2', 'X4', 'X5', 'X3', ]}

df2 = pd.DataFrame(dummy_data2, columns = ['attribute', 'missing_or_unknown'])

df2_transposed = df2.transpose()
print("df2_transposed=\n", df2_transposed)
df2_transposed.columns = df2_transposed.iloc[0]
df2_transposed = df2_transposed.drop(df2_transposed.index[0])
print("df2_transposed with HEADER Replaced=\n", df2_transposed)

df_new = pd.concat([df2_transposed, df1])
print("df_new=\n", df_new)