Как рассматривать в качестве одного столбца все, что содержится в круглых скобках в python

#python #pandas #multiple-columns

Вопрос:

У меня есть CSV-файл, который я читаю вместе с Пандами. Есть ситуация, когда я разделяю один столбец на несколько столбцов пробелом.

Пример:

CSV:

 ID  , Reference
101 , WHERE ID = 'TEST'
102 , WHERE ID IN (A,B,C)
103 , WHERE ID IN ("Hello World", "I AM NEW")
 

Выход:

     ID  REF_1 REF_2 REF_3      REF_4   REF_5 REF_6 REF_7 REF_8   REF_9
0  101  WHERE    ID     =       TEST
1  102  WHERE    ID    IN  (A, B, C)
2  103  WHERE    ID    IN   ('Hello   World'   'I    AM   NEW   USER')
 

Желаемый результат:

     ID  REF_1 REF_2 REF_3                             REF_4
0  101  WHERE    ID     =                              TEST
1  102  WHERE    ID    IN                         (A, B, C)
2  103  WHERE    ID    IN  ('Hello World', 'I AM NEW USER')
 

Ответ №1:

Один быстрый обходной путь:

 import pandas as pd

df = pd.DataFrame(
    {
        "ID": [101, 102, 103],
        "REF_1": ["WHERE", "WHERE", "WHERE"],
        "REF_2": ["ID", "ID", "ID"],
        "REF_3": ["=", "IN", "IN"],
        "REF_4": ["TEST", "(A, B, C)", "('Hello "],
        "REF_5": ["", "", "World'"],
        "REF_6": ["", "", "'I "],
        "REF_7": ["", "", "AM "],
        "REF_8": ["", "", "NEW "],
        "REF_9": ["", "", "USER')"],
    }
)

columns = ["REF_5", "REF_6", "REF_7", "REF_8", "REF_9"]

for column in columns:
    df["REF_4"] = df["REF_4"]   df[column]
df["REF_4"] = df["REF_4"].str.replace("''", "', '")

df.drop(columns=columns, inplace=True)

print(df)
# Outputs
    ID  REF_1 REF_2 REF_3                             REF_4
0  101  WHERE    ID     =                              TEST
1  102  WHERE    ID    IN                         (A, B, C)
2  103  WHERE    ID    IN  ('Hello World', 'I AM NEW USER')