亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何合并多個 DataFrame 的列表并用另一個列表標記每個列

如何合并多個 DataFrame 的列表并用另一個列表標記每個列

躍然一笑 2022-05-19 18:44:57
我有一個來自人口普查 api 的 DataFrames 列表,我每年都將拉入列表中。因此,在我的 for 循環結束時,我有一個包含每年數據幀的列表和一個與 for 循環一起使用的年份列表。我遇到的問題是合并列表中的所有 DataFrame,同時用年份列表標記它們。所以我嘗試使用 reduce 函數,但看起來它只占用了我擁有的 6 個數據幀中的 2 個。concat 只是將它們添加到數據框中,而無需標記或更改任何內容# Dependenciesimport pandas as pdimport requestsimport jsonimport pprintimport requestsfrom census import Censusfrom us import states# Censusfrom config import (api_key, gkey)year = 2012c = 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]
查看完整描述

1 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

不需要年份列表,只需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)


查看完整回答
反對 回復 2022-05-19
  • 1 回答
  • 0 關注
  • 230 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號