如何使用 python 在 csv 中附加列

how to append columns in csv with python

我有一个 csv 文件test.csv,大约有 4 列

A   |  B   |  C  | D
======================
aed | etge | 3r4 | pu9
frt | eide | 9h4 | sd2
jey | edlr | 8d2 | bu6

使用 python 我想在 A 列下附加 B 列,在 C 列下附加 D 列 所以我有下面

A    |  C 
===========
aed  | 3r4 
frt  | 9h4 
jey  | 8d2 
etge | pu9
eide | sd2
edlr | bu6

为此建议使用 pandas。

尝试这样的事情:

import pandas as pd

dataFrame = pd.DataFrame({"A":["aed","etge","3r4"],
                          "B":["aed","etawge","3r4"],
                          "C":["aed","etgase","3r4"],
                          "D":["aed","etgqee","3r4"],})

AB = pd.concat([dataFrame["A"],dataFrame["B"]])
CD = pd.concat([dataFrame["C"],dataFrame["D"]])

final_dataFrame = pd.concat([AB,CD], axis=1)

final_dataFrame.columns=["A","C"]

我没有使用与您拥有的完全相同的数据,但这显示了如何执行此操作。您可以使用 pandas.read_csv 读取 csv 文件。

编辑:如果您想直接从文件中读取,您首先必须更改文件,使其没有“=====”,因此它应该如下所示:

A   |  B   |  C  | D
aed | etge | 3r4 | pu9
frt | eide | 9h4 | sd2
jey | edlr | 8d2 | bu6

完成后,执行如下操作:

# read the file. If test.csv is not in the same folder, then you have to give the complete file path.
dataFrame = pd.read_csv("test.csv", sep="|")
# remove unnecessary white spaces.
dataFrame = dataFrame.apply(lambda x: x.str.strip() if x.dtype == "object" else x)

# create a new column by combining column 0 and 1.
AB = pd.melt(dataFrame.iloc[:, [0, 1]])["value"]

# create a new column by combining column 2 and 3.
CD = pd.melt(dataFrame.iloc[:, [2, 3]])["value"]

# combine the previous two columns
final_dataFrame = pd.concat([AB, CD], axis=1)
# give them names "A" and "C"
final_dataFrame.columns = ["A", "C"]

print(final_dataFrame)

如果您不担心可读性,可以像这样组合不同的步骤:

dataFrame = pd.read_csv("file.csv", sep="|").apply(lambda x: x.str.strip() if x.dtype == "object" else x)
final_dataFrame = pd.concat([pd.melt(dataFrame.iloc[:, [0, 1]])["value"], pd.melt(dataFrame.iloc[:, [2, 3]])["value"]], axis=1)
final_dataFrame.columns = ["A", "C"]

print(final_dataFrame)

这给出了结果:

      A    C
0   aed  3r4
1   frt  9h4
2   jey  8d2
3  etge  pu9
4  eide  sd2
5  edlr  bu6