仅使用选定列合并CSV

2024-05-14 15:10:10 发布

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

我有三个CSV,我正试图合并在一起。这三个CSV有一系列不同的列,尽管这三个CSV都有一组列,它们之间是一致的。在

我将这些列的列标题作为字符串存储在Python列表中。我只想合并这些列。在


作为补充说明,我已经尝试使用一个名为brewery的库在this thread中实现一个answer,尽管收到了一条错误消息

'CSVDataSource' object has no attribute 'field_names'

我觉得使用CSV模块可以很容易地实现这一点,但我不确定如何在每个CSV中搜索正确的列,然后只合并这些列。另一个我不确定如何处理的问题是确保在合并的CSV中每个列的正确位置。即如果columnA是第一个CSV中的第五个交叉点,然后是第二个CSV中的第四个交叉点,我如何确保它们在合并CSV中处于相同的位置?在

我使用的是python2.7,不幸的是,我无法访问Pandas。在

代码示例:

^{pr2}$

Tags: csv字符串answer消息标题列表object错误
1条回答
网友
1楼 · 发布于 2024-05-14 15:10:10

因为熊猫是不能用的,我会用numpy,如下所示:

# first get all the columns of each csv file as lists
csv1_cols = ['ColumnA','ColumnB','ColumnF','ColumnC']
csv2_cols = ['ColumnD','ColumnA','ColumnC','ColumnB','ColumnH']
csv3_cols = ['ColumnH','ColumnJ','ColumnA','ColumnB','ColumnC']

# then get the indices of the columns that you want to keep
idxs_colA = [csv1_cols.index('ColumnA'), csv2_cols.index('ColumnA'), csv3_cols.index('ColumnA')]
idxs_colB = [csv1_cols.index('ColumnB'), csv2_cols.index('ColumnB'), csv3_cols.index('ColumnB')]
idxs_colC = [csv1_cols.index('ColumnC'), csv2_cols.index('ColumnC'), csv3_cols.index('ColumnC')]

# get the columns as vectors and flatten them
colA = np.array([csv1[:,idxs_colA[0]], csv2[:,idxs_colA[1]], csv3[:,idxs_colA[2]]]).flatten()
colB = np.array([csv1[:,idxs_colB[0]], csv2[:,idxs_colB[1]], csv3[:,idxs_colB[2]]]).flatten()
colC = np.array([csv1[:,idxs_colC[0]], csv2[:,idxs_colC[1]], csv3[:,idxs_colC[2]]]).flatten()

# finally, create a new np array (with the cols in the order you want)
# and transpose it
new_csv = np.array([colA, colB, colC]).T

挺难看的,但很管用。在

相关问题 更多 >

    热门问题