Разделение и копирование CSV-полей в пандах - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть CSV-файл, например,

ID, имя, продукты

101, Tesco, Apple; Банан; Апельсины

102, Lidl, сок; Йогурт

103, Aldi, Фрукты; овощи; рис

Используя библиотеку панд, я хочу разделить их на новый CSV, чтобы для столбца продуктов было только одно значение для каждого поля

Следующий код, который я пробовал, только выбирает этот конкретный столбец и записывает значения в новый CSV.Я хочу изменить вывод.

df=pd.read_csv('final.csv',delimiter=",", index_col="ID",encoding="ISO- 
8859-1")
df1=df[,"Name","Products"]
df1.to_csv('a.csv',header='True')
print (df1)

Я хочу, чтобы новый сгенерированный CSV имел значения в следующем формате:

101, Tesco, Apple

101,Tesco, Банан

101, Tesco, Апельсины

102, Лидл, Сок

102, Лидл, Йогурт

103, Альди, Фрукты

..

1 Ответ

0 голосов
/ 18 февраля 2019

Мы можем:

1) Разделить элементы в каждом ряду с помощью разделителя ";".Затем мы получаем один столбец для каждого элемента.

2) Затем мы разбиваем столбцы, чтобы получить их как строки, а затем удаляем уровень индекса, который добавляется на основе предыдущих значений столбца.

3) Назовите этот pd.Series и присоединитесь к основному df.

prod = df['products'].str.split(";", expand=True).unstack().reset_index(level=0, drop=True).dropna()

    ID
    101         Apple
    102         Juice
    103        Fruits
    101        Banana
    102        Yogurt
    103    vegetables
    101       Oranges
    103          rice

prod.name = 'product'

df = df.join(prod.to_frame())
df.drop('products', axis=1, inplace=True)

Output:

      Name     product
ID                    
101  Tesco       Apple
101  Tesco      Banana
101  Tesco     Oranges
102   Lidl       Juice
102   Lidl      Yogurt
103   Aldi      Fruits
103   Aldi  vegetables
103   Aldi        rice
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...