我正在从一个网站上抓取数据,该网站根据网站上可用的数据使用不同的列名构建一个Pandas数据框。我有一个列名向量,例如:
colnames = ['column1', 'column2', 'column3', 'column5']
这是我希望将抓取的数据存储在其中的postgres数据库的列。
我遇到的问题是,我必须设置抓取以获取所需的所有数据的方式,最后我抓取了一些我没有用并且不在我的postgres数据库中的列。这些列每次都不会具有相同的名称,因为某些页面具有额外的数据,所以我不能简单地排除我不想要的列名称,因为我不知道所有这些将是什么。我的postgres数据库中还会有一些列,这些列的数据不会每次都被抓取。
因此,当我尝试将结果数据帧上载到postgres时,出现错误:
psycopg2.errors.UndefinedColumn: column "column4" of relation "my_db" does not exist
这导致了我的问题:
鉴于某些列可能不存在于数据框中,我如何使用我存储在向量中的列名来对结果熊猫数据框进行子集化?我尝试过my_dt = my_dt[colnames]
,它返回错误:
KeyError: ['column1', 'column2', 'column3'] not in index
可复制的示例:
df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], columns =
['column1', 'column2', 'column3', 'column4'])
subset_columns = ['column1', 'column2', 'column3', 'column5']
test = df[subset_columns]
任何帮助将不胜感激。
答案 0 :(得分:1)
我设法找到了一个解决方法,尽管我仍然不知道是什么导致初始的“关键错误”以向量的形式出现,而不仅仅是那些不是我的数据框的列的元素:
df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], columns =
['column1', 'column2', 'column3', 'column4'])
subset_columns = ['column1', 'column2', 'column3', 'column5']
column_match = set(subset_columns) & set(df.columns)
df = df[column_match]
Out[69]:
column2 column1 column3
0 2 1 3
1 6 5 7
答案 1 :(得分:1)
您可以简单地做到:
colnames = ['column1', 'column2', 'column3', 'column5']
df[df.columns & colnames]