如何在Pandas中按列计数分组数据?

  • 本文关键字:数据 Pandas python pandas csv
  • 更新时间 :
  • 英文 :


我有一个CSV文件,有很多行和不同数量的列。

如何按列计数分组数据并在不同的帧中显示?

CSV文件包含以下数据:

1 OLEG US FRANCE BIG
1 OLEG FR 18
1 NATA 18

因为我每一行有不同的列数我必须按列数对行进行分组并显示3帧才能设置标题然后:

ID NAME  STATE COUNTRY HOBBY 
FR1: 1  OLEG    US   FRANCE  BIG
ID NAME  COUNTRY AGE
FR2: 1   OLEG   FR    18

FR3:  
ID  NAME AGE
1  NATA    18

总之,我需要按列数分组行,并在不同的数据框架中显示它们。

由于pandas不允许拥有不同长度的列,所以不要使用它来导入数据。您的目标是创建三个独立的df,因此首先将数据导入为列表,然后处理它及其不同的长度。

解决这个问题的一种方法是使用csv.reader读取数据,并创建具有列表推导式和列表长度条件的df's

with open('input.csv', 'r') as f:
reader = csv.reader(f, delimiter=' ')
data= list(reader)

df1 = pd.DataFrame([item for item in data if len(item)==3], columns='ID NAME AGE'.split())
df2 = pd.DataFrame([item for item in data if len(item)==4], columns='ID NAME COUNTRY AGE'.split())
df3 = pd.DataFrame([item for item in data if len(item)==5], columns='ID NAME STATE COUNTRY HOBBY'.split())

print(df1, df2, df3, sep='nn')
ID  NAME AGE
0  1  NATA  18
ID  NAME COUNTRY AGE
0  1  OLEG      FR  18
ID  NAME STATE COUNTRY HOBBY
0  1  OLEG    US  FRANCE   BIG

如果你需要为同一个步骤硬编码太多行(例如太多df's),那么你应该考虑使用循环来创建它们,并将每个数据帧作为键/值存储在字典中。

编辑这里是创建这些df's的小优化方法。我认为你不能绕过创建你想要使用单独的df's列的列表,所以你需要知道你的数据中有多少列的变化(除非你想创建那些df's而不命名列)。

col_list=[['ID', 'NAME', 'AGE'],['ID', 'NAME', 'COUNTRY', 'AGE'],['ID', 'NAME', 'STATE', 'COUNTRY', 'HOBBY']]
with open('input.csv', 'r') as f:
reader = csv.reader(f, delimiter=' ')
data= list(reader)
dict_of_dfs = {}
for cols in col_list:
dict_of_dfs[f'df_{len(cols)}'] = pd.DataFrame([item for item in data if len(item)==len(cols)], columns=cols)

for key,val in dict_of_dfs.items():
print(f'{key=}: n {val} n')
key='df_3': 
ID  NAME AGE
0  1  NATA  18 
key='df_4': 
ID  NAME COUNTRY AGE
0  1  OLEG      FR  18 
key='df_5': 
ID  NAME STATE COUNTRY HOBBY
0  1  OLEG    US  FRANCE   BIG 

现在您没有df的变量,而是将它们作为键放在字典中。(我用它的列数命名df,df_3是有三列的df

如果你需要用pandas导入数据,你可以看看这篇文章。

相关内容

  • 没有找到相关文章

最新更新