Как организовать dataFrame следующим образом в Python: - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть файл с некоторой информацией:

1. Идентификатор фильма (первый символ перед «:»)

2. Идентификатор пользователя

4.Пользовательский рейтинг

3.Дата

Все элементы разделяются знаком ",", но идентификатором фильма, который разделяется двоеточием

, если я создаю кадр данных следующим образом:

 df=pd.read_csv('combined_data_1.txt',header = None,names['Movie_ID','User_ID','Rating','Date'])

и распечатайте фрейм данных, я получу это:

image

Что не правильно, очевидно.

Итак, есливы смотрите на столбец «Movie_ID», в первом ряду есть 1: 1488844.В столбце «Movie_ID» должно быть только число «1» (перед двоеточием), а не «1: 1488844».Остальное (1488844) должно быть в столбце User_ID.

Другая проблема состоит в том, что не каждый столбец «Movie_ID» имеет свой правильный идентификатор, и в этом случае он должен быть «1», пока я не найду другой идентификатор фильма., это снова будет первым числом перед двоеточием.

Я знаю, что идентификаторы всех фильмов следуют последовательности, то есть: 1,2,3,4, ...

Другая проблема, с которой я столкнулся, заключалась в том, что при чтении файла по какой-то причине происходит разделение, когда есть двоеточие, поэтому после первой строки (которая не разделяется), когда появляется двоеточие, строка в«Movie_ID» создан, содержащий только, например: «2:», а не что-то вроде первого ряда.

В конце я хотел бы получить что-то вроде этого:

image

Но я не знаю, как организовать это.Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Используйте shift с axis=1 и просто измените столбцы:

df=df.shift(axis=1)
df['Movie_ID']=df['User_ID'].str[0]
df['User_ID']=df['User_ID'].str[2:]

А теперь:

print(df)

Был бы желаемый результат.

0 голосов
/ 31 декабря 2018

Я полагаю, что проблема может быть связана с тем, как ваши данные хранятся и, следовательно, анализируются из-за способа хранения вашего идентификатора фильма, разделенного: (двоеточие), а не (запятая), как было бы необходимо в CSV.

Если вы можете выполнить синтаксический анализ, чтобы разделить его исключительно запятыми.текст до его открытия в формате CSV, вы можете устранить эту проблему.Я отмечаю это только потому, что Pandas не допускает использование нескольких разделителей.

Вот то, что я смог придумать в отношении создания чего-то, что обозначается двоеточием и запятой для того, как вы хотите.Хотя я знаю, что это не ваша конечная цель, надеюсь, это поможет вам выбрать правильный путь.

import pandas as pd
with open("combined_data_1.txt") as file:
    lines = file.readlines()


#Splitting the data into a list delineated by colons
data = []
for line in lines:
    if(":" in line):
        data.append([])
    else: #Using else here prevents the line containing the colon from being saved.
        data[len(data)-1].append(line)


for x in range(len(data)):
    print("Section " + str(x+1) + ":\n")
    print(str(data[x]) + "\n\n")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...