gpt4 book ai didi

python - 使用循环填充空的 python 数据框

转载 作者:太空狗 更新时间:2023-10-29 22:13:07 25 4
gpt4 key购买 nike

假设我想用循环中的值创建并填充一个空数据框。

import pandas as pd
import numpy as np

years = [2013, 2014, 2015]
dn=pd.DataFrame()
for year in years:
df1 = pd.DataFrame({'Incidents': [ 'C', 'B','A'],
year: [1, 1, 1 ],
}).set_index('Incidents')
print (df1)
dn=dn.append(df1, ignore_index = False)

即使 ignore index 为 false,append 也会给出一个对角矩阵:

>>> dn
2013 2014 2015
Incidents
C 1 NaN NaN
B 1 NaN NaN
A 1 NaN NaN
C NaN 1 NaN
B NaN 1 NaN
A NaN 1 NaN
C NaN NaN 1
B NaN NaN 1
A NaN NaN 1

[9 rows x 3 columns]

它应该是这样的:

>>> dn
2013 2014 2015
Incidents
C 1 1 1
B 1 1 1
A 1 1 1

[3 rows x 3 columns]

有更好的方法吗?有没有办法修复追加?

我有 pandas 版本 '0.13.1-557-g300610e'

最佳答案

import pandas as pd

years = [2013, 2014, 2015]
dn = []
for year in years:
df1 = pd.DataFrame({'Incidents': [ 'C', 'B','A'],
year: [1, 1, 1 ],
}).set_index('Incidents')
dn.append(df1)
dn = pd.concat(dn, axis=1)
print(dn)

产量

           2013  2014  2015
Incidents
C 1 1 1
B 1 1 1
A 1 1 1

请注意,在循环外调用pd.concat 一次 更省时而不是在循环的每次迭代中调用 pd.concat

每次调用 pd.concat 都会为新的 DataFrame 分配新的空间,并且每个组件 DataFrame 中的所有数据都被复制到新的 DataFrame 中。如果您从 for 循环中调用 pd.concat 然后您最终按顺序执行n**2 个副本,其中 n 是年数。

如果您将部分 DataFrames 累积在一个列表中并调用一次 pd.concat在列表之外,则 Pandas 只需要执行 n 次复制即可生成 dn

关于python - 使用循环填充空的 python 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28910089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com