我有一个包含一些信息的文件:
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:”,而不包含第一行。
最后,我想得到这样的东西:
但是我不知道该如何组织。 感谢您的帮助!
答案 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)
将iterable
与shift
一起使用,只需修改列即可:
axis=1
现在:
df=df.shift(axis=1)
df['Movie_ID']=df['User_ID'].str[0]
df['User_ID']=df['User_ID'].str[2:]
将是理想的结果。