[英]Setting values of a list to a list of dataframes
場景:我有兩個列表,一個是帶有名稱的字符串列表,另一個是具有不同內容的數據幀列表。 我試圖將第一個列表中的值放入第二個列表中。
數據示例:
list1 = ['jan18', 'feb18', 'mar18', 'apr18', 'may18']
列表2是具有以下結構的數據幀列表:
DF1_LIST2:
row1 row2 row3 row4
5 55 12
3 51 11
3 52 11
9 59 11
DF2_LIST2:
row1 row2 row3 row4
9 91 7
5 1 23
3 24 56
9 68 21
我的目標是將list1的第一個元素添加到list2的第一個數據幀的第一列中的所有單元格; 然后list2的第二個元素到列表2的第二個數據幀的第一列的所有單元格,依此類推。 輸出將是這樣的:
DF1_LIST2:
row1 row2 row3 row4
jan18 5 55 12
jan18 3 51 11
jan18 3 52 11
jan18 9 59 11
DF2_LIST2:
row1 row2 row3 row4
feb18 9 91 7
feb18 5 1 23
feb18 3 24 56
feb18 9 68 21
到目前為止我所做的是嘗試建立一個三重for循環,第一個遍歷list1的項目,第二個遍歷list2的數據幀,第三個遍歷每個數據幀的行:
import pandas as pd
import os
from os import listdir
from os.path import isfile, join
import glob
# Get File Names
mypath = "//DGMS/Desktop/uploaded"
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]
# Get dates
onlyfiles = [name.split("_")[0] for name in onlyfiles]
df_of_names = pd.DataFrame(onlyfiles)
# Get File Contents
all_files = glob.glob(os.path.join(mypath, "*.xls*"))
contentdataframes = [pd.read_excel(f) for f in all_files]
for dfs in contentdataframes:
dfs.insert(0,"date*","")
dfs.insert(1,"apply*","")
for date in onlyfiles:
for dfs in contentdataframes:
for row in dfs.itertuples(index=True):
dfs.set_value(row,0,date)
這給了我一個錯誤,我相信因為標題列,它仍然算作正常行,而不是索引。
問題:有沒有正確的方法來做到這一點?
使用assign
在每個DataFrame
添加新列:
d = [pd.read_excel(f).assign(row1=os.path.basename(f).split('.')[0].split('_')[0])
for f in all_files]
編輯:
如果想使用列和.assign
多列可讀性較差,可以使用loop
處理每個DataFrame
並最后追加到list
:
contentdataframes = []
for f in all_files:
df = pd.read_excel(f)
df['col1'] = 10
df['col2'] = 'string1'
df['row1'] = os.path.basename(f).split('.')[0].split('_')[0]
contentdataframes.append(df)
您可以通過os.path.splitext
從完整路徑中提取文件名。 然后用pd.DataFrame.assign
包裝列表理解:
import os
def extract_name(x):
return os.path.splitext(fp)[0].split('_')[0]
dfs = [pd.read_excel(fp).assign(row1=extract_name(fp)) for fp in all_files]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.