Python 如何使用创建的zipcodes列表过滤普查数据(来自API)?

Python 如何使用创建的zipcodes列表过滤普查数据(来自API)?,python,pandas,api,census,Python,Pandas,Api,Census,我使用普查包装器从普查api中提取数据,我想用我编译的ZIP列表过滤这些数据 因此,我试图从人口普查的拉取请求数据中筛选数据。我有一个csv文件的压缩我想使用,我已经把它放在一个列表中了。我试过一些方法,比如把人口普查放在一个数据框中,试着用我的列表过滤zipcode列,但我认为我的语法不正确 这只是我提取的测试数据 census_data = c.acs5.get(('NAME', 'B25034_010E'), {'for': 'zip code tabulation

我使用普查包装器从普查api中提取数据,我想用我编译的ZIP列表过滤这些数据

因此,我试图从人口普查的拉取请求数据中筛选数据。我有一个csv文件的压缩我想使用,我已经把它放在一个列表中了。我试过一些方法,比如把人口普查放在一个数据框中,试着用我的列表过滤zipcode列,但我认为我的语法不正确

这只是我提取的测试数据

census_data = c.acs5.get(('NAME', 'B25034_010E'),
           {'for': 'zip code tabulation area:*'})
因此,我尝试了这种方法,还尝试了一个for循环,其中我使用census_pd['Zipcode']和一个内部for循环,使用类似zip1==zip2 append的if语句对列表进行迭代

我的依赖

# Dependencies

import pandas as pd
import requests
import json
import pprint
import numpy as np
import matplotlib.pyplot as plt
import requests
from census import Census
import gmaps
from us import states

# Census & gmaps API Keys
from config import (api_key, gkey)
c = Census(api_key, year=2013)

# Configure gmaps
gmaps.configure(api_key=gkey)

如前所述,我想过滤掉我可能从特定于我使用的zipcodes的人口普查数据中提取的任何数据。样本数据不是很清楚,因此下面是如何使用要过滤的值列表过滤列上的数据框

import pandas as pd
from io import StringIO

# Example data
df = pd.read_csv(StringIO(
'''zip,some_column
"01234",A1
"01234",A2
"01235",A3
"01236",B1
'''), dtype = {"zip": str})

zips_list = ["01234", "01235"]

# using a join
zips_df = pd.DataFrame({"zip": zips_list})
df1 = df.merge(zips_df, how='inner', on='zip')
print(df1)

# using query
df2 = df.query('zip in @zips_list')
print(df2)


# using an index
df.set_index("zip", inplace=True)
df3=df.loc[zips_list]
print(df3)
所有情况下的输出:

     zip some_column
0  01234          A1
1  01234          A2
2  01235          A3

现在还不清楚你的数据是什么样子的。我猜您有一个标量列,并且希望使用列表过滤该列。如果是这个问题,那么您可以使用
isin
内置方法来过滤数据帧

import pandas as pd

data = {'col': [2, 3, 4], 'col2': [1, 2, 3], 'col3': ["asd", "ads", "asdf"]}
df = pd.DataFrame.from_dict(data)
random_list = ["asd", "ads"]

df_filtered = df[df["col3"].isin(random_list)]

哇,等我回来的时候,我得试试这个。实际上,我继续做了第一个解决方案,那就是将列表转换为数据帧,然后合并。在那之后,我删除了所有的NaN值,用我想要的模板做了一个df,这样在我将一帧转换成相同的数据类型后,它就可以工作了。这样做,线条更少,看起来更干净!我甚至没有想到将列表转换为数据帧,我能够合并并删除所有未对齐的值,所以这对我来说很有效。谢谢
     zip some_column
0  01234          A1
1  01234          A2
2  01235          A3
import pandas as pd

data = {'col': [2, 3, 4], 'col2': [1, 2, 3], 'col3': ["asd", "ads", "asdf"]}
df = pd.DataFrame.from_dict(data)
random_list = ["asd", "ads"]

df_filtered = df[df["col3"].isin(random_list)]