Как соединить две строки и добавить имя python в CSV - PullRequest
1 голос
/ 13 июля 2020

Данные CSV ниже

X,Y
3.4,45
34,5.5
5,55

Код ниже

with open(r'C:\Users\ma\Desktop\m.csv') as f:
    reader = csv.reader(f)
    row['Z'] = ",".join( row['X'],row['Y'])    
    print (row)

GOt error >> TypeError: индексы списка должны быть целыми числами или срезами, а не str

Ожидается, что Z - это комбинация X и Y

X,Y,Z
3.4,45,"3.4,45"
34,5.5,"34,5.5"
5,55,"5,55"

Ответы [ 4 ]

1 голос
/ 13 июля 2020

Если вам нужен простой python, проверьте приведенный ниже код. Однако я бы посоветовал использовать «pandas» при работе с большими наборами данных.

import csv

with open('sample.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        combined_column = ",".join(row)
        if combined_column == "X,Y":
            combined_column = "Z"
        else:
            combined_column = '"{combined}"'.format(combined=combined_column)
        # print(combined_column)
        row.append(combined_column)
        row_string = ",".join(row)
        print(row_string)
1 голос
/ 13 июля 2020

Проще сделать с pandas

import pandas as pd

df = pd.read_csv("m.csv", dtype=str)
df["Z"] = '"' + df["X"] + "," + df["Y"] + '"'

Вывод:

   X    Y         Z
0  3.4   45  "3.4,45"
1   34  5.5  "34,5.5"
2    5   55    "5,55"
1 голос
/ 13 июля 2020

попробуйте это, csv.DictReader + list comprehension

import csv

with open(r'read_path') as f:
    reader = csv.DictReader(f)
    lines = [{**r, **{"z": ",".join(r.values())}} for r in reader]

with open('write_path', 'w') as fw:
    writer = csv.DictWriter(fw, lines[0].keys())
    writer.writeheader()
    writer.writerows(lines)
1 голос
/ 13 июля 2020

Попробуйте следующее:

import csv

with open(r'C:\Users\ma\Desktop\m.csv') as f:
    reader = csv.reader(f)
    coordinates = []
    for row in reader:
        x = row[0]
        y = row[1]
        coordinates.append({"x": x, "y": y, "z": f"{x},{y}"})

coordinates будет:

[{'x': '3.4', 'y': '45', 'z': '3.4,45'},
 {'x': '34', 'y': '5.5', 'z': '34,5.5'},
 {'x': '5', 'y': '55', 'z': '5,55'}]

Как только у вас будет coordinates, вы можете использовать следующий код, чтобы получить эту спецификацию c вывод:

print("X,Y,Z")
for e in coordinates:
    print(f'{e["x"]},{e["y"]},"{e["z"]}"')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...