python - 如何合并多个 DataFrame 的列表并用另一个列表标记每个列
问题描述
我有一个来自人口普查 api 的 DataFrames 列表,我每年都将拉入列表中。
因此,在我的 for 循环结束时,我有一个包含每年数据帧的列表和一个与 for 循环一起使用的年份列表。
我遇到的问题是合并列表中的所有 DataFrame,同时用年份列表标记它们。
所以我尝试使用 reduce 函数,但看起来它只占用了我拥有的 6 个数据帧中的 2 个。
concat 只是将它们添加到数据框中,而无需标记或更改任何内容
# Dependencies
import pandas as pd
import requests
import json
import pprint
import requests
from census import Census
from us import states
# Census
from config import (api_key, gkey)
year = 2012
c = Census(api_key, year)
for length in range(6):
c = Census(api_key, year)
data = c.acs5.get(('NAME', "B25077_001E","B25064_001E",
"B15003_022E","B19013_001E"),
{'for': 'zip code tabulation area:*'})
data_df = pd.DataFrame(data)
data_df = data_df.rename(columns={"NAME": "Name",
"zip code tabulation area": "Zipcode",
"B25077_001E":"Median Home Value",
"B25064_001E":"Median Rent",
"B15003_022E":"Bachelor Degrees",
"B19013_001E":"Median Income"})
data_df = data_df.astype({'Zipcode':'int64'})
filtervalue = data_df['Median Home Value']>0
filtervalue2 = data_df['Median Rent']>0
filtervalue3 = data_df['Median Income']>0
cleandata = data_df[filtervalue][filtervalue2][filtervalue3]
cleandata = cleandata.dropna()
yearlst.append(year)
datalst.append(cleandata)
year += 1
所以这会生成两个单独的列表,一个带有年份,另一个带有数据框。
因此,我的输出出现在一个缺少 Dataframe 条目的 Dataframe 中,或者它只是在不更改列的情况下连接了所有数据。
我要寻找的是如何合并列表中的所有内容,但是如果可能的话,合并时 datalst[0] 将被标记为 yearlst[0]
解决方案
不需要年份列表,只需assign
将年份列到数据框。另外避免增加年份并将其作为迭代器列。事实上,考虑链接您的流程:
for year in range(2012, 2019):
c = Census(api_key, year)
data = c.acs5.get(('NAME', "B25077_001E","B25064_001E", "B15003_022E","B19013_001E"),
{'for': 'zip code tabulation area:*'})
cleandata = (pd.DataFrame(data)
.rename(columns={"NAME": "Name",
"zip code tabulation area": "Zipcode",
"B25077_001E": "Median_Home_Value",
"B25064_001E": "Median_Rent",
"B15003_022E": "Bachelor_Degrees",
"B19013_001E": "Median_Income"})
.astype({'Zipcode':'int64'})
.query('(Median_Home_Value > 0) & (Median_Rent > 0) & (Median_Income > 0)')
.dropna()
.assign(year_column = year)
)
datalst.append(cleandata)
final_data = pd.concat(datalst, ignore_index = True)
推荐阅读
- c# - 验证列表
在 C# 中动态 args - html - 打开图 og:带有 url 作为元或链接的标签
- asp.net-mvc - 如何将 ProtectedSessionStorage 传递给控制器?
- docker - `docker-compose.yml` 中卷的根级空对象是什么意思?
- reactjs - CRA + react-pdf,当使用 npm run build 时,它不起作用
- taskbar - 如何制作自己的 Windows 10 任务栏工具栏?
- python - 使用布尔值而不是带有“if”语句的 int 是否有好处
- image - 从 url/http 下载并打开图片 [Android Xamarin App]
- python - 获取与每行python的id对应的值
- python - Dagster 在配置模式中传递有序字典