我从一个网站上抓取数据,该网站构建了一个熊猫数据框架,根据网站上可用的数据,使用不同的列名。我有一个列名的向量,比如:
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]任何帮助都将不胜感激。
发布于 2019-05-03 15:59:54
您可以简单地这样做:
colnames = ['column1', 'column2', 'column3', 'column5']
df[df.columns & colnames]发布于 2019-05-02 22:26:14
我设法找到了修复方法,尽管我仍然不明白是什么导致最初的“键错误”以向量的形式出现,而不仅仅是不是我的数据帧中的列的元素:
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 7https://stackoverflow.com/questions/55953419
复制相似问题