我想将codes
添加到dataframe dictionary
。
codes = [['01', '02', '03', '05', '06', '08', '10', '11', '13', '15', '17', '19', '21', '23', '25', '27', '29', '31', '33', '35', '37', '39', '43', '45', '4.55', '48', '52']
#27Codes
df = pd.read_excel(sales,sheet_name=None,ignore_index = True, skiprows=7)
#27 Sheets
for i in codes:
for key in df.keys():
df['Sheet1']['Code'] = i
我无法弄清楚为什么我似乎在每个数据帧中都有i
。我想我明白为什么我无法弄清楚如何纠正它。
我是编码的新手,我根本无法找到解决方案。
预期产出:
df['Sheet1']
Date Particulars Inwards Code
1 2017-04-01 EFG 12800 01
2 2017-07-22 ABC 100 01
3 2017-09-05 BCD 10000 01
4 2018-03-13 ABC 2000 01
Code
列应在下一个数据框中为02
,依此类推。
在此之后,我想concat
数据帧和group_by
详细信息,然后写入excel。
TIA
答案 0 :(得分:5)
您可以使用词典理解:
df = {k: v.assign(Code=x) for x, (k, v) in zip(codes, df.items())}
pd.DataFrame.assign
允许您添加具有固定值的系列。
答案 1 :(得分:4)
在阅读包含多个工作表的工作簿时,pandas.read_excel
会返回一个DataFrames字典,其中字典的键是工作表的名称。
好像你想根据列表中的值为每个DataFrame添加一个列代码。
您的代码:
for i in codes:
for key in df.keys():
df['Sheet1']['Code'] = i
有两个问题。首先,在循环内部,您根本不使用key
。您始终可以访问"Sheet1"
。其次,这是一个双循环,这意味着它将迭代每个代码的每张表。
您想要的是并行循环遍历值。基本上你想要做以下事情:
for i in range(len(codes)):
code = codes[i]
key = df.keys()[i]
df[key]['Code'] = code
这正是zip()
所做的。因此,您可以更紧凑地编写上述循环:
for code, key in zip(codes, df.keys()):
df[key]['Code'] = code
这不是假设codes
的长度等于字典df
中的键数。
之后,您可以使用pandas.concat
连接所有DataFrame:
combined = pd.concat(df)
哪个有效,因为concat
:
采用Series,DataFrame的序列或映射
...
如果传递了dict,则排序的键将用作keys参数,除非>它被传递,在这种情况下将选择值(见下文)。