【问题标题】:How to organise dataFrame like this, in Python:如何在 Python 中像这样组织 dataFrame:
【发布时间】:2019-05-27 16:38:06
【问题描述】:

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

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。只有数字“1”(就在冒号之前)应该在“Movie_ID”列中,而不是“1:1488844”。其余的 (1488844) 应该在 User_ID 列中。

另一个问题是,并非每个“Movie_ID”列都有正确的 ID,在这种情况下,它应该是“1”,直到我找到另一个电影 ID,这也是冒号前的第一个数字。

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

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

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

但我不知道如何像这样组织。 感谢您的帮助!

【问题讨论】:

  • 你是如何得到电影 id = 2, 3 的?
  • 对不起,我没听懂

标签: python pandas dataframe


【解决方案1】:

我认为问题可能来自于您的数据的存储方式和解析方式,因为您的电影 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")

【讨论】:

  • 我试图做的是使用split df['Movie_ID'] = df['Movie_ID'].str.split(':'),但这不起作用,因为在创建dataFrame时,出现冒号时,有一个split,所以有些行带有“1 : 或 2: , 3:..”。为了创建一个数据框,我使用了:df=pd.read_csv('combined_data_1.txt',header=None,names['Movie_ID','User_ID','Rating','Date']) 我不知道是否有任何我应该使用的参数在找到冒号时不会自动拆分。我也知道默认情况下,参数split,当它找到逗号时会分裂
  • 我用将文件转换为 CSV 格式的二维列表的代码更新了我的答案。如果我正确理解您的意图,这应该会使转换为 CSV 更容易。
【解决方案2】:

使用shiftaxis=1 并简单地修改列:

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

现在:

print(df)

会是理想的结果。

【讨论】:

猜你喜欢
  • 2020-11-06
  • 2015-11-12
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2013-02-19
  • 2011-01-05
相关资源
最近更新 更多