【发布时间】:2019-08-15 14:52:52
【问题描述】:
我有一个尺寸为 183,223,040x4 的矩阵,其变量如下所示。 'REG'有140个不同的值,'SAMAC'和'SAMAC.1'都有1145个不同的值
我想遍历 REG 以获得 140 个大小为 1145*1145 的矩阵,其中包含正确的“值”。
我尝试了以下方法:
-循环国家
-创建空矩阵 1145*1145,以 SAMAC 为索引,列名称为 SAMAC.1
-逐行查看当前数据帧
-检查 SAMAC(行)和 SAMAC.1(列)的值
-在空矩阵中定位 SAMAC 和 SAMAC.1 并分配相应的 VALUE
import pandas as pd
import dask.dataframe as dd
all_sam=dd.read_csv(r'C:\GP2\all_sams_trial.csv',skiprows=1)
all_sam.head()
SAMAC SAMAC.1 REG Value
0 m_pdr m_pdr aus 0.0
1 m_wht m_pdr aus 0.0
2 m_gro m_pdr aus 0.0
3 m_v_f m_pdr aus 0.0
4 m_osd m_pdr aus 0.0
countries=list(all_sam["REG"].unique().compute())
col_names=list(all_sam["SAMAC"].unique().compute())
for country in countries:
df=pd.DataFrame(0,index=col_names,columns=col_names)
sam=all_sam[all_sam["REG"]==country].compute()
for index,row in sam.iterrows():
row_index=str(row["SAMAC"])
col_index=str(row["SAMAC.1"])
df.loc[row_index,col_index]=row['Value']
print(index)
df.to_csv(country+"_SAM.csv")
问题在于计算需要很长时间(大约 2 天)。有没有办法加快速度?
【问题讨论】:
标签: python pandas dataframe memory large-data