Python 按不同行拆分/读取CSV文件

Python 按不同行拆分/读取CSV文件,python,csv,dataframe,pyspark,Python,Csv,Dataframe,Pyspark,我有一个3列的csv文件 Key,Branch,Account a,213,234567 a,454,457900 a,562,340094 a,200,456704 b,400,850988 b,590,344433 c,565,678635 c,300,453432 c,555,563546 c,001,660905 我希望遍历每一行,从键列(a、b和c)中获得不同的行,并将它们拆分为3个不同的pyspark数据报 a,213,234567 a,454,457900 a

我有一个3列的csv文件

Key,Branch,Account 
a,213,234567
a,454,457900
a,562,340094
a,200,456704
b,400,850988
b,590,344433
c,565,678635
c,300,453432
c,555,563546
c,001,660905
我希望遍历每一行,从键列(a、b和c)中获得不同的行,并将它们拆分为3个不同的pyspark数据报

   a,213,234567
   a,454,457900
   a,562,340094
   a,200,456704


   b,400,850988
   b,590,344433


   c,565,678635
   c,300,453432
   c,555,563546
   c,001,660905
像这样的

csv_string=“”键、分支机构、帐户
a、 213234567
a、 454457900
a、 562340094
a、 200456704
b、 400850988
b、 59034433
c、 5678635
c、 300453432
c、 5563546
c、 001660905“
导入csv
输入io
#
# 1. 将csv_字符串解析为OrderedPicts列表
#
def parse_csv(字符串):
#如果您正在读取文件,则无需执行此操作
#StringIO胡说八道——只需将文件传递给csv.DictReader()
string\u file=io.StringIO(字符串)
reader=csv.DictReader(字符串文件)
返回列表(读卡器)
csv\u表=解析\u csv(csv\u字符串)
#
# 2. 在表格的每一行中循环并获取键
#-如果我们以前见过该键,请将该行放入列表中
#使用具有相同键的其他行
#-如果没有,则为该密钥启动一个新列表
#
结果={}
对于csv_表中的行:
键=行[“键”].strip()
打印(键“:”,第行)
如果输入结果:
结果[键]。追加(行)
其他:
结果[键]=[行]
#
# 3. 最后,打印结果。
#如果你保留这些线路,可能会更容易处理
#以其解析形式,但为了可读性,我们可以加入这些值
#将该行的值返回到带有逗号的字符串中
#
打印(结果)
打印(“”)
对于result.values()中的键列表:
对于键列表中的行:
打印(“,”.join(line.values()))
打印(“”)

您可以使用pandas库执行相同的操作,它还将为您提供用最少的代码执行更多操作的能力。 请阅读有关熊猫的文章

下面是获得所需输出的代码。我将数据存储在字典中,以便您可以使用
dict[key]
ex.
dict[a]

import pandas

df = pandas.read_csv("data.csv", delimiter=",")

keys = df["Key"].unique() #This will provide all unique keys from csv

sorted_DF = df.groupby("Key") #Sort data based on value of column Key

dict = {} #To store data based on key
for key in keys:
    dict[key] = sorted_DF.get_group(key).values.tolist()

for key in keys:
    print("{} : {}".format(key, dict[key]))
输出

a:[a',213234567],'a',454457900],'a',562340094],'a',200456704]]

b:[b',400850988],[b',59034433]]


c:[c',5656568635],'c',300453432],'c',55553546],'c',1660905],

输出正确吗?一个输出有4行,但有3行。如果您试图将不同的数据帧保存为文件系统中的不同文件,请查看我的答案。python/pandas解决方案不适用于大数据。好吧,问题是什么?你真的尝试过什么,做过什么研究吗?