检查列名是否存在

2024-09-28 21:01:42 发布

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

我有一个数据框df,它包含了很多年的字段名。在

                                                   field
year description                                               
1993 bar0                                       a01arb92
     bar1                                       a01svb92
     bar2                                       a01fam92
     bar3                                       a08
     bar4                                       a01bea93

然后,每年我都会有一个stata文件,它以id作为列,并作为附加列,df中提到的部分(或全部)字段名。例如,1993.dta可以是

^{pr2}$

我每年都需要检查df中列出的所有字段是否真的存在于相应的文件中(作为列)。然后我想将结果保存回原始数据框中。有没有一个很好的方法不用迭代每个字段就可以做到这一点?在

预期产量:

                                                   field   exists
year description                                               
1993 bar0                                       a01arb92        1
     bar1                                       a01svb92        1
     bar2                                       a01fam92        0
     bar3                                       a08             1
     bar4                                       a01bea93        1

例如,如果除了a01fam92之外的每个字段都作为列存在于1993文件中。在


Tags: 文件fielddfdescriptionyear字段名bar3bar2
2条回答

这里有一种方法,利用熊猫会自动填充缺失索引的NaN。在

首先准备数据。您可能已经完成了这一步。在

df1 = pd.read_csv(r'c:\temp\test1.txt', sep=' ')

df1
Out[30]: 
   year description     field
0  1993        bar0  a01arb92
1  1993        bar1  a01svb92
2  1993        bar2  a01fam92
3  1993        bar3       a08
4  1993        bar4  a01bea93

df1 = df1.set_index(['year', 'description', 'field'])

df2 = pd.read_csv(r'c:\temp\test2.txt', sep=' ')

df2
Out[33]: 
   year description     field
0  1993        bar0  a01arb92
1  1993        bar1  a01svb92
2  1993        bar3       a08
3  1993        bar4  a01bea93

df2 = df2.set_index(['year', 'description', 'field'])

接下来,在df2中创建一个新列,并使用pandas将这些列复制到上一个数据帧。这将填充缺失值的NaN。然后使用fillna指定一个值0。在

^{pr2}$

尝试遍历每年,过滤数据帧以获得与每个特定年份相关联的字段,然后比较元素是否在stata文件中

 import pandas as pd
 d= pd.stata.read_stata("file")
  • 读取csv文件,并将其存储在数据框中
 import pandas as pd
 df= pd.read_csv("file")
  • 过滤并提取每年的字段。在
df[df["year"]==1993].fields #Output: List of fields in year 1993

你可以通过列出年份来概括这个过程

l= df.year
for x in l:
   f= df[df["year"]==x].fields
   # Then check if f in strata file.

这里有关于如何filter fields using Pandas的详细说明。在

  • 将starata字段与您的列表进行比较

您可以使用All()运算符。在

^{pr2}$

如果是真的,那么字段中的所有元素都在strata文件中。在

使一切都成为函数。在

^{3}$

更新

def isInList(x):
  return  [ x for x in d if x in df[df["year"]==x].fields] == d

相关问题 更多 >