尝试将字典转换为数据帧并使用for循环追加到相同的数据帧

时间:2018-01-30 06:43:34

标签: python dictionary

好吧,说实话,我不确定如何提出这个问题,因为我认为这个错误可能发生在多个地方,所以我只需输入所有这些错误(感谢您对一个菜鸟有耐心)这里)。

我正在尝试使用lastfm数据库: https://grouplens.org/datasets/hetrec-2011/

所以他们有这个python脚本,可以帮助我们从这个数据集中读取数据。

所以我做的是首先使用给定的iter_lines函数解析csv文件的行:

### first, open file into a file handle object
file = os.path.join(baseDir, 'artists.dat')
file_opener = open(file, "r")
lines = iter_lines(file_opener)

其中iter_lines()函数看起来像这样(给定):

def iter_lines(open_file):
    reader = csv.reader(
        open_file,
        delimiter='\t',
    )
    next(reader)  # Skip the header
    return reader

然后我尝试使用他们给定的parse_artist_line()函数来读取artist.csv:

artists_df = pd.DataFrame(['key','value'])

for line in lines:
    ### so the parse_artist_line() will return a dictionary
    artist_dict = parse_artist_line(line)
    artist_list = artist_dict.items()

    ### try to put in a temporary dataframe
    temp = pd.DataFrame.from_dict(artist_dict, orient='index')

    ### finally append the temporary df to the artists_df
    artists_df.append(temp, ignore_index=True)

print(artists_df.head(5))

当我用最后一个语句打印artists_df时,我只得到这个输出:

       0
0    key
1  value

和他们的parse_artist_line()看起来像这样:

def parse_artist_line(line):
    (artist_id, name, _, _) = line
    current_artist = deepcopy(ARTISTS)
    current_artist["artist_id"] = int(artist_id)
    current_artist["name"] = name

    return current_artist
不过,如果你打印temp,它看起来像这样:

                     0
artist_id        18743
name       Coptic Rain

如果我尝试使用“columns”作为from_dict()的“orient”参数输入,我会收到错误:

ValueError: If using all scalar values, you must pass an index

我已关注以下帖子/信息页面:

我不再确定,我做错了什么(可能是每一步)。任何帮助/指导表示赞赏!

1 个答案:

答案 0 :(得分:1)

我认为这里没有必要将文件转换为DataFrame然后转换为usecols,更简单的是使用read_csv,如果需要,过滤列名称添加参数artists_df = pd.read_csv('artists.dat', sep='\t', usecols=['id','name']) print (artists_df.head()) id name 0 1 MALICE MIZER 1 2 Diary of Dreams 2 3 Carpathian Forest 3 4 Moi dix Mois 4 5 Bella Morte

artists_df = pd.read_csv('artists.dat', sep='\t')
print (artists_df.head())

   id               name                                         url  \
0   1       MALICE MIZER       http://www.last.fm/music/MALICE+MIZER   
1   2    Diary of Dreams    http://www.last.fm/music/Diary+of+Dreams   
2   3  Carpathian Forest  http://www.last.fm/music/Carpathian+Forest   
3   4       Moi dix Mois       http://www.last.fm/music/Moi+dix+Mois   
4   5        Bella Morte        http://www.last.fm/music/Bella+Morte   

                                          pictureURL  
0    http://userserve-ak.last.fm/serve/252/10808.jpg  
1  http://userserve-ak.last.fm/serve/252/3052066.jpg  
2  http://userserve-ak.last.fm/serve/252/40222717...  
3  http://userserve-ak.last.fm/serve/252/54697835...  
4  http://userserve-ak.last.fm/serve/252/14789013...  

如果想要读取所有列:

{{1}}