使用循环填充空 python 数据框
Filling empty python dataframe using loops
假设我想用循环中的值创建并填充一个空数据框。
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'
据我所知,由于速度问题,您应该避免逐行添加到数据帧
我平时做的是:
l1 = []
l2 = []
for i in range(n):
compute value v1
compute value v2
l1.append(v1)
l2.append(v2)
d = pd.DataFrame()
d['l1'] = l1
d['l2'] = l2
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
新的space都会分配一个新的DataFrame,并且
每个组件 DataFrame 中的所有数据都被复制到新的 DataFrame 中。如果
你从 for 循环中调用 pd.concat
然后你最终按订单做
n**2
份,其中 n
是年数。
如果将部分DataFrames累积到一个列表中,调用一次pd.concat
在列表之外,则 Pandas 只需执行 n
个副本即可制作 dn
.
假设我想用循环中的值创建并填充一个空数据框。
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'
据我所知,由于速度问题,您应该避免逐行添加到数据帧
我平时做的是:
l1 = []
l2 = []
for i in range(n):
compute value v1
compute value v2
l1.append(v1)
l2.append(v2)
d = pd.DataFrame()
d['l1'] = l1
d['l2'] = l2
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
新的space都会分配一个新的DataFrame,并且
每个组件 DataFrame 中的所有数据都被复制到新的 DataFrame 中。如果
你从 for 循环中调用 pd.concat
然后你最终按订单做
n**2
份,其中 n
是年数。
如果将部分DataFrames累积到一个列表中,调用一次pd.concat
在列表之外,则 Pandas 只需执行 n
个副本即可制作 dn
.