基于CSV创建二维数组

2024-05-01 21:56:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含数百万行的CSV文件,格式如下:

start, finish,count;
101,101,10;
101,103,2;
101,104,8;
102,103,5;

所以我们有一个开始的地点,一个结束的地点,还有一个旅行人数的统计。你知道吗

我想做的是把它放入一个“表样式”矩阵,所有的起始位置沿着顶部,所有的结束位置沿着侧面,在矩阵的主体中,有一个位于该相交点内的所有计数的总和。你知道吗

到目前为止,我已经清理和导入了CSV文件,并将开始和结束位置存储为向量,但我不确定如何继续形成矩阵体时,有人能帮忙吗?你知道吗

谢谢你。你知道吗

编辑:我希望它看起来如下:

    101,102;
101,10,0;
103,2,5;
104,8,0;

Tags: 文件csv编辑格式count矩阵样式向量
3条回答

你说你有数百万行,所以我不知道这是否会有效,但如果你没有遇到内存问题,熊猫数据帧是一种方法:

import pandas as pd
df = pd.read_csv('inputfile.csv')

df = df.groupby(['start','finish']).agg({'count':sum}).reset_index()
# Create Pivot table
df_out = df.pivot(index='finish',columns = 'start',values='count')
# Write Output
df_out.rename_axis(None).to_csv('output.csv')

另一个带有^{}的解决方案:

print (df.pivot(index='finish', columns='start', values='count'))
start    101  102
finish           
101     10.0  NaN
103      2.0  5.0
104      8.0  NaN

如果需要删除列和索引名,请使用^{}(在pandas0.18.0中新增):

print (df.pivot(index='finish', columns='start', values='count')
         .rename_axis(None)
         .rename_axis(None, axis=1))
      101  102
101  10.0  NaN
103   2.0  5.0
104   8.0  NaN

使用set_indexunstack

df.set_index(['start', 'finish'])['count'].unstack(0)

enter image description here


保存到csv

print df.set_index(['start', 'finish'])['count'].unstack(0).rename_axis(None) \
    .to_csv('myfilename.csv')

,101,102
101,10.0,
103,2.0,5.0
104,8.0,

相关问题 更多 >