从另一个csv文件添加列

2024-04-25 12:07:15 发布

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

我有一些csv文件,假设现在我在一个文件夹中有3个文件,每个文件有三列

1.csv                2.csv                3.csv

A    B    C        A    B    C        A    B    C

5   23    56       5    43   23       5    65   08
10  31    77       10   76   66       10   34   72
20  33    98       20   39   28       20   23   64
30  18    26       30   27   39       30   73   92

我想创建一个带有A列的新csv文件,并通过循环从另一个csv文件中仅添加B列,如下所示:

预期结果:

new.csv

A    B     B    B
5    23    43   65
10   31    76   34
20   33    39   23
30   18    27   73

但我失败了

这是我当前的代码:

import pandas as pd
import numpy as np
import csv
import glob
import os 

path = "C:/Users/SYIFAAZRA/Documents/belajar_wradlib/learning/" 
os.chdir(path) 
file = glob.glob("*.csv") 
one = { 'A' : ['5','10','20','30'] } 
i = 1 
for f in file: 
  i = i+1 
  col_names = ['B', 'C'] 
  df = pd.read_csv(f, delimiter=',',usecols=[1, 2], names=col_names) 
  df = pd.DataFrame(one) 
  df['B'] = pd.Series(df) 
  print(df)

Tags: 文件csvpathimport文件夹dfnewnames
2条回答

您将要合并键“A”上的数据帧,因为它存在于所有文件中。 我建议在循环之前创建df

df = pd.DataFrame(one) 
for f in file: 
  i = i+1 
  col_names = ['B', 'C'] 
  df_dummy = pd.read_csv(f, delimiter=',',usecols=[1, 2], names=col_names) 
  df.merge(df_dummy['B'],left_on='A',right_on='A',suffixes=('_left','_right'))

请注意,您可能需要清理列的名称,这取决于您最终打算做什么

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html#pandas.DataFrame.merge

省略csv文件的读取,因为它与问题无关,并且更容易获得完整的最小示例:

csv1=pd.DataFrame(np.array([[5,23,56],[10,31,77],[20,33,98]]), columns=['a','b','c'])
csv2=pd.DataFrame(np.array([[5,43,23],[10,76,66],[20,39,28]]), columns=['a','b','c'])
csv3=pd.DataFrame(np.array([[5,65,8],[10,34,72],[20,23,64]]), columns=['a','b','c'])
 
df1= csv1.iloc[:,:2]
df1['b1']=csv2.iloc[:,1]
df1['b2']=csv3.iloc[:,1]
df1

enter image description here

下面的第二个问题是关于许多文件的。如果文件的数量不是很大,我会将操作分成两个循环。 一个是将文件读入数据帧列表,另一个是将它们聚合到一个数据帧中

 path = "C:/Users/SYIFAAZRA/Documents/belajar_wradlib/learning/" 
 os.chdir(path) 
 files = glob.glob("*.csv") 
 aa=[]
 for f  in files:
     aa.append(  pd.read_csv(f)) 

 df = aa[0].iloc[:,:2]  # makes first two columns AB

 for i,a in enumerate(aa[1:]):        # go through the remaining dataframes
     df[str(i)] = a.iloc[:,1]    # name the remaining columns b1,b2,b3...
     

所有这些都不是很优雅,但我很难记住pandas中优雅的解决方案。我喜欢简单易懂的阅读

相关问题 更多 >