如何在Python中像这样组织dataFrame:

时间:2018-12-31 00:11:25

标签: python pandas dataframe

我有一个包含一些信息的文件:

1。电影ID(“:”之前的第一个字符)

2。用户ID

4。用户评分

3。日期

所有元素均以“,”分隔,但电影ID由冒号分隔

如果我创建这样的数据框:

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

并打印数据框,我会得到这个:

这显然是不正确的。

因此,如果您查看“ Movie_ID”列,则在第一行中会有1:1488844。 “ Movie_ID”列中只能有数字“ 1”(冒号前),而不是“ 1:1488844”列中。其余(1488844)应该在User_ID列中。

另一个问题是,并不是每个“ Movie_ID”列都具有正确的ID,在这种情况下,应为“ 1”,直到我找到另一个电影ID,该ID将再次成为冒号之前的第一个数字。

>

我知道所有电影的ID都遵循一个顺序,即:1、2、3、4,...

我看到的另一个问题是,当我读取文件时,由于某种原因,当有冒号时会发生分裂,因此在第一行(不会分裂)之后,当冒号出现时,会出现一行创建的“ Movie_ID”中的内容仅包含例如“ 2:”,而不包含第一行。

最后,我想得到这样的东西:

但是我不知道该如何组织。 感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我认为问题可能出在您的数据存储和解析方式上,这是因为电影ID的存储方式由:(冒号)而不是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")

答案 1 :(得分:0)

iterableshift一起使用,只需修改列即可:

axis=1

现在:

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

将是理想的结果。