如何使用创建的邮政编码列表过滤人口普查数据(来自 API)?
How to filter census data (From API) with a created list of zipcodes?
我使用人口普查包装器从人口普查 api 中提取数据,我想用我编译的 zips 列表过滤掉这些数据。
所以我正在尝试从人口普查的拉取请求数据中过滤数据。我有一个我想使用的 zip 的 csv 文件,我已经将它放入列表中。我尝试了一些方法,例如将人口普查数据放入数据框中并尝试通过列表过滤邮政编码列,但我认为我的语法不正确。
这只是我拉取的测试数据,
census_data = c.acs5.get(('NAME', 'B25034_010E'),
{'for': 'zip code tabulation area:*'})
census_pd = census_pd.rename(columns={"NAME": "Name", "zip code tabulation area": "Zipcode"})
censusfilter = census_pd['Zipcode'==ziplst]
所以我尝试了这种方式,我还尝试了一个 for 循环,其中我使用 census_pd['Zipcode'] 和一个内部 for 循环,使用 if 语句遍历列表,如 zip1 = = zip2 附加到列表。
我的依赖
# 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)
如前所述,我想过滤掉我可能从我使用的邮政编码特定的人口普查数据中提取的任何数据
样本数据不是很清楚,所以下面是如何使用值列表过滤列上的数据框
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)]
我使用人口普查包装器从人口普查 api 中提取数据,我想用我编译的 zips 列表过滤掉这些数据。
所以我正在尝试从人口普查的拉取请求数据中过滤数据。我有一个我想使用的 zip 的 csv 文件,我已经将它放入列表中。我尝试了一些方法,例如将人口普查数据放入数据框中并尝试通过列表过滤邮政编码列,但我认为我的语法不正确。
这只是我拉取的测试数据,
census_data = c.acs5.get(('NAME', 'B25034_010E'),
{'for': 'zip code tabulation area:*'})
census_pd = census_pd.rename(columns={"NAME": "Name", "zip code tabulation area": "Zipcode"})
censusfilter = census_pd['Zipcode'==ziplst]
所以我尝试了这种方式,我还尝试了一个 for 循环,其中我使用 census_pd['Zipcode'] 和一个内部 for 循环,使用 if 语句遍历列表,如 zip1 = = zip2 附加到列表。
我的依赖
# 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)
如前所述,我想过滤掉我可能从我使用的邮政编码特定的人口普查数据中提取的任何数据
样本数据不是很清楚,所以下面是如何使用值列表过滤列上的数据框
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)]