繁体   English   中英

为每个唯一的 id 收集来自 python 中 csv 的所有值

[英]Gather for each unique ids all values from csv in python

我有一个这样的数据集:

id,LON,LAT
00x1,2.17105,41.31353
00x1,1.935983,41.04712
00x2,-5.381285,36.11647
00x2,0.830717,42.19835
00x1,10.21912,43.51599

并且我希望每个唯一的 id 以表单(预期输出)收集列 LAT、LON:

[00x1, [2.17105,41.31353], [1.935983,41.04712], [10.21912,43.51599]]
[00x2, [-5.381285,36.11647], [0.830717,42.19835]]

到目前为止我的代码:

 df = pd.read_csv('/home/repos/master/testdat.csv')
 ids = []
 ids.append((df.as_matrix(columns=['id'])))
 #find unique ids
 unique_ids  =  np.unique(ids)
 coordinates = (df.as_matrix(columns=['LON', 'LAT']))

访问所有 ID 和坐标,但我不知道如何实现预期的输出。

使用 Pandas,可以将 2 个系列组合成一系列列表,用GroupBy聚合,然后使用列表理解。 给定一个数据框df

df['LON-LAT'] = list(map(list, zip(df['LON'], df['LAT'])))
grouped = df.groupby('id')['LON-LAT'].apply(list)

res = [[k, *v] for k, v in grouped.items()]

结果:

[['00x1',
  [2.1710500000000001, 41.31353],
  [1.9359830000000002, 41.04712],
  [10.21912, 43.515990000000002]],
 ['00x2',
  [-5.3812850000000001, 36.11647],
  [0.83071700000000004, 42.198349999999998]]]

您可以使用 csv.DictReader 处理文件并使用另一个字典来保存数据。 最后将字典转换为列表。 我认为这比使用熊猫要容易得多。

import csv
d = {}
with open('testdat.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        d[row['id']] = d.get(row['id'], []) + [[row['LON'], row['LAT']]]
res = [[key] + value for key, value in d.items()]
print(res)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM