Получение столбца из dataframe для записи его в файл csv - PullRequest
0 голосов
/ 22 марта 2019

Я работаю над фреймом данных pandas, который содержит 3 столбца с именем: drugName, обзор и рейтинг. Я пытаюсь получить обзор в соответствии с его оценкой, если он выше или равен 6, так что это положительный отзыв, что я должен написать его в CSV-файл. Вот мой код:

import csv
import pandas as pd
filename ="C:\\Users\Amin Chaari\Desktop\Book1.csv"

def user_text(filename):
     with open (filename, encoding="utf8") as f:
          datas = csv.reader(f, delimiter = ';')
          lines = [row for row in datas]
user={}
try:
    for i in range(1,5):
        if lines[0][i] != 'condition':
                print(lines[0][i])
                grouped_column = []
                for j,row in enumerate(lines):
                    if j>0:
                        grouped_column.append(row[i])
                        user.update({lines[0][i]:grouped_column})
except IndexError:
      pass
df1=pd.DataFrame(user)
df1.groupby(['review'])
return df1
df=user_text(filename)
for i in range (0,40303):
df['rating'][i]=float(df['rating'][i])

for i in range(0,40303):
if df['rating'][i] >= 6: 
   df['review'].to_csv("C:\\Users\\rev_pos.csv",encoding='utf8')

это ошибка, которую я получаю:

 AttributeError: 'str' object has no attribute 'to_csv'

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Измените конец вашего кода следующим образом:

df.loc[df['rating'][i] >= 6, 'review'].to_csv("C:\\Users\\rev_pos.csv",encoding='utf8')

Этот код фильтрует столбец «обзор» по «рейтингу», а затем сохраняет результат в CSV сразу.

0 голосов
/ 26 марта 2019

Я нашел способ решить эту проблему, вот код:

for i in range (0,40303):
if df.rating[i] >= 6:
    pos_rev.append(df.review[i])

df1=pd.DataFrame(pos_rev)
file2="C:/Users/Amin Chaari/Desktop/pos.csv"
df1.to_csv(file2,sep='\t',encoding='utf8')
0 голосов
/ 22 марта 2019

Я не могу написать это как комментарий, но вот еще несколько советов для вашего кода:

  • использовать функцию read_csv модуля pandas вместо модуля csv
import pandas as pd


def user_text(filename):
    df = pd.read_csv(filename, sep=';')
    return df
  • укажите тип данных при чтении вместо итерации по массиву
import pandas as pd
import numpy as np
...
# assume the columns are called a and b
df = pd.read_csv(filename, sep=';', dtype={'a': np.float32, 'b': np.float32})
  • перебирать кадры с df.iterrows
for i, row in df.iterrows():
    do_something(row)

Надеюсь, что поможет

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