簡體   English   中英

使用 pandas python 從 csv 文件中以特定方式讀取

[英]Read in a specific way from a csv file with pandas python

我在 csv 文件中有一個數據,這里是一個示例:

firstnb,secondnb,distance
901,19011,459.73618164837535
901,19017,492.5540450352788
901,19018,458.489289271722
903,13019,167.46632044684435
903,13020,353.16001204909657

所需的 output:

901,19011,19017,19018
903,13019,13020

正如您在 output 中看到的,我想使用 firstnb 列 (901/903)

並在每個旁邊放上 secondnb 我相信你可以從所需的 output 中比我的解釋更好地理解:D

到目前為止我嘗試的是以下內容:

import pandas as pd
import csv
df = pd.read_csv('test.csv')
    with open('neighborList.csv','w',newline='') as file:
        writer = csv.writer(file)
        secondStation = []
        for row in range(len(df)):
            firstStation = df['firstnb'][row]
            for x in range(len(df)):
                if firstStation == df['firstnb'][x]:
                    secondStation.append(df['secondnb'][x])
                    # line = firstStation ,secondStation
                    # writer.writerow(line)        
            print(firstStation,secondStation)
            secondStation = []

我的代碼 output 這個:

901 [19011, 19017, 19018]
901 [19011, 19017, 19018]
901 [19011, 19017, 19018]
903 [13019, 13020]
903 [13019, 13020]

Pandas 有一個內置的 function 來執行此操作,稱為 groupby:

df = pd.read_csv(YOUR_CSV_FILE) 
df_grouped = list(df.groupby(df['firstnb'])) # group by first column

# chain keys and values into merged list
for key, values in df_grouped:
    print([key] + values['secondnb'].tolist())

這里我只打印子列表; 您可以將它們以您喜歡的任何格式(字符串、整數等)保存到新的 csv 中

首先,我按firstnb對數據進行分組,使用aggregate function 在secondnb中創建值list

df[['firstnb','secondnb']].groupby('firstnb').aggregate(func=list).to_dict()

通過把它變成一個dict ,我們得到:

{'secondnb': {901: [19011, 19017, 19018], 903: [13019, 13020]}}

我不太清楚最終的 output 應該是什么(純字符串、列表……),但從這里開始,很容易生成您想要的任何內容。

例如,列表列表:

intermediate = df[['firstnb','secondnb']].groupby('firstnb').aggregate(func=list).to_dict()

[[k] + v for k,v in intermediate['secondnb'].items()]

結果:

[[901, 19011, 19017, 19018], [903, 13019, 13020]]
def toList(a):
  res = []
  for r in a:
    res.append(r)
  return res
df.groupby('firstnb').agg(toList)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM