Как создать и изменить новый файл CSV на основе существующего файла, отвечающего определенным условиям? - PullRequest
0 голосов
/ 28 января 2020

У меня есть файл CSV с твитами, имеющими 4 столбца (user_Id, status, tweet_Id, tweet_text) и более 50000 строк. Первый столбец user_id имеет 4 уникальных идентификатора, которые повторяются по всему столбцу. Статус второго столбца - это двоичная классификация, имеющая 0 или 1 для каждого твита. Третий столбец - идентификатор твита, а четвертый - текст твита. Для первого столбца.

Входной файл уже отсортирован по двум столбцам, сначала tweet_id, а затем user_id. Файл выглядит следующим образом:

  Sr#,       user_id,     status,      tweet_id,                 tweet_text

   1,         3712,          1,         444567,       It is not easy to to do this you know...

   2,         3713,          0,         444567,       It is not easy to to do this you know...

   3,         3714,          1,         444567,       It is not easy to to do this you know...

   4,         3715,          1,         444567,       It is not easy to to do this you know...

   5,         3712,          1,         444572,       The process is yet to start

   6,         3713,          0,         444572,       The process is yet to start

   7,         3714,          0,         444572,       The process is yet to start

   8,         3712,          1,         444580,       I am betting on this

   9,         3714,          0,         444580,       I am betting on this

  10,         3715,          0,         444580,       I am betting on this

    and so on.......

Если мы наблюдаем первые 4 строки, значение user_id равно разные, но tweet_id и текст совпадают. Аналогично для рядов нет. 4, 5 и 6, user_id отличается, но tweet_id и text одинаковы.

Я должен написать новый CSV-файл, в котором для каждого tweet_id и text все идентификаторы пользователя первого столбца (в этом примере 4) создаются как новые столбцы, и для каждого столбца идентификатора пользователя значение классификации для этого твита, который является столбцом статуса, записывается под новым столбцом идентификатора. Если нет значения статуса для worker_id, тогда значение статуса этого user_id остается пустым.

Выходной файл может выглядеть следующим образом.

Sr#,         tweet_text,                        tweet_id,    3712,    3713,    3714,   3715

1,    It is not easy to to do this you know...,  444567,       1,       0,       1,     1

2,    The process is yet to start,               444572,       1,       0,       0,

3,    I am betting on this,                      444580,       1,                0,     0

Я попытался предположить, что всякий раз, когда изменяется tweet_id, статус tweet_id, tweet_text и четыре уникальных идентификатора записываются в новый файл. Код, который я использовал, приведен ниже:

 import csv
 import pandas as pd

 with open('combined_csvFinalSortedClean2.csv', 'w', newline='') as csvfile:
   filewriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
   filewriter.writerow(['tweet_id','tweet_text', '3712', '3713', '3714', '3714'])

 df = pd.read_csv('combined_csvFinalSortedClean2.csv', sep=',', header=None, index_col=False)

 with open("combined_csvFinalSorted2.csv", "r", encoding="utf-8") as csv_file:
   reader = csv.reader(csv_file, delimiter=',')
   header = next(reader) # get header
   curr_tweet=0
   curr_wid=0
   count=0

   for row in reader:
     wid=row[0]
     id=row[2]

     if (curr_tweet!=id) and (curr_wid!=wid):
      curr_tweet=id
      curr_wid=wid
      count=1
      df[0]=id
      df[1]=row[3]

     if wid==3712:
       df[2]=row[2]
     else: 
       df[2] = None

     if wid==3713:
       df[3]=row[2]
     else: 
       df[3]= None

     if wid==3714:
       df[4]=row[2]
     else: 
       df[4] = None

     if wid==3715:
       df[5]=row[2]
     else: 
       df[5] = None

     df.to_csv('output_file.csv', sep=',', encoding='utf-8', index=False)
     count+=1

     #else:
       #None
       #count+=1

Я пробовал это, но проблема в том, что модуль to_csv pandas 'записывает только последнюю строку в новый выходной файл и ничего не записывает в четыре уникальных Столбцы Id, основанные на заданных условиях if ... else. Я буду признателен за помощь.

Спасибо.

1 Ответ

0 голосов
/ 28 января 2020

Вот способ сделать pivot_table:

newdf = (pd
        .pivot_table(df, 
              index=['tweet_id','tweet_text'], 
              columns=['user_id'], 
              values='status', 
              fill_value=0)
        .reset_index()
        .rename({'user_id': 'sr'}))

print(newdf)

user_id  tweet_id                                       tweet_text  3712  \
0          444567         It is not easy to to do this you know...     1   
1          444572                      The process is yet to start     1   
2          444580                             I am betting on this     1   

user_id  3713  3714  3715  
0           0     1     1  
1           0     0     0  
2           0     0     0  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...