簡體   English   中英

Python - 使用函數和創建數據框

[英]Python - Using functions and creating dataframes

我對 python 相當陌生,我已經開始工作/創建不同的項目。

在一個項目中,我使用 Spotipy 來獲取藝術家唱片。 我有下面的代碼來獲取藝術家信息並調用另一個函數show_album_tracks

def show_artist_albums(id):
    albums = []
    results = sp.artist_albums(artist['id'], album_type='album')
    albums.extend(results['items'])
    while results['next']:
        results = sp.next(results)
        albums.extend(results['items'])
    print('Total albums:', len(albums))
    unique = set()  # skip duplicate albums
    for album in albums:
        name = album['name'].lower()
        if name not in unique:
            print(name)
            unique.add(name)
            show_album_tracks(album)

在 show_album_tracks 中,它會打印以下曲目列表

def show_album_tracks(album):
    tracks = []
    results = sp.album_tracks(album['id'])
    #print(results)
    tracks.extend(results['items'])
    while results['next']:
        results = sp.next(results)
        tracks.extend(results['items'])
    for track in tracks:
        print('  ', track['name'])
        print()
        print(track)

所以tracks包含我想放入 csv 的信息。 什么是出口的最佳方法? 我嘗試在函數中創建一個數據框,但它打印出來是空的。 任何幫助表示贊賞。 任何其他有助於閱讀和理解結構的鏈接也值得贊賞

請參閱下面的輸出片段:

{'artists': [{'external_urls': {'spotify': 'https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02'}, 'href': 'https://api.spotify.com/v1/artists/06HL4z0CvFAxyc27GXpf02', 'id': '06HL4z0CvFAxyc27GXpf02', 'name': 'Taylor Swift', 'type': 'artist', 'uri': 'spotify:artist:06HL4z0CvFAxyc27GXpf02'}], 'available_markets': ['AD', 'AE', 'AR', 'AT', 'AU', 'BE', 'BG', 'BH', 'BO', 'BR', 'CA', 'CH', 'CL', 'CO', 'CR', 'CY', 'CZ', 'DE', 'DK', 'DO', 'DZ', 'EC', 'EE', 'EG', 'ES', 'FI', 'FR', 'GB', 'GR', 'GT', 'HK', 'HN', 'HU', 'ID', 'IE', 'IL', 'IN', 'IS', 'IT', 'JO', 'JP', 'KW', 'LB', 'LI', 'LT', 'LU', 'LV', 'MA', 'MC', 'MT', 'MX', 'MY', 'NI', 'NL', 'NO', 'NZ', 'OM', 'PA', 'PE', 'PH', 'PL', 'PS', 'PT', 'PY', 'QA', 'RO', 'SA', 'SE', 'SG', 'SK', 'SV', 'TH', 'TN', 'TR', 'TW', 'US', 'UY', 'VN', 'ZA'], 'disc_number': 1, 'duration_ms': 170640, 'explicit': False, 'external_urls': {'spotify': 'https://open.spotify.com/track/43rA71bccXFGD4C8GOpIlN'}, 'href': 'https://api.spotify.com/v1/tracks/43rA71bccXFGD4C8GOpIlN', 'id': '43rA71bccXFGD4C8GOpIlN', 'is_local': False, 'name': 'I Forgot That You Existed', 'preview_url': None, 'track_number': 1, 'type': 'track', 'uri': 'spotify:track:43rA71bccXFGD4C8GOpIlN'}
   Cruel Summer

{'artists': [{'external_urls': {'spotify': 'https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02'}, 'href': 'https://api.spotify.com/v1/artists/06HL4z0CvFAxyc27GXpf02', 'id': '06HL4z0CvFAxyc27GXpf02', 'name': 'Taylor Swift', 'type': 'artist', 'uri': 'spotify:artist:06HL4z0CvFAxyc27GXpf02'}], 'available_markets': ['AD', 'AE', 'AR', 'AT', 'AU', 'BE', 'BG', 'BH', 'BO', 'BR', 'CA', 'CH', 'CL', 'CO', 'CR', 'CY', 'CZ', 'DE', 'DK', 'DO', 'DZ', 'EC', 'EE', 'EG', 'ES', 'FI', 'FR', 'GB', 'GR', 'GT', 'HK', 'HN', 'HU', 'ID', 'IE', 'IL', 'IN', 'IS', 'IT', 'JO', 'JP', 'KW', 'LB', 'LI', 'LT', 'LU', 'LV', 'MA', 'MC', 'MT', 'MX', 'MY', 'NI', 'NL', 'NO', 'NZ', 'OM', 'PA', 'PE', 'PH', 'PL', 'PS', 'PT', 'PY', 'QA', 'RO', 'SA', 'SE', 'SG', 'SK', 'SV', 'TH', 'TN', 'TR', 'TW', 'US', 'UY', 'VN', 'ZA'], 'disc_number': 1, 'duration_ms': 178426, 'explicit': False, 'external_urls': {'spotify': 'https://open.spotify.com/track/1BxfuPKGuaTgP7aM0Bbdwr'}, 'href': 'https://api.spotify.com/v1/tracks/1BxfuPKGuaTgP7aM0Bbdwr', 'id': '1BxfuPKGuaTgP7aM0Bbdwr', 'is_local': False, 'name': 'Cruel Summer', 'preview_url': None, 'track_number': 2, 'type': 'track', 'uri': 'spotify:track:1BxfuPKGuaTgP7aM0Bbdwr'}
   Lover

如果您發布輸出,則很容易識別。 但任何方式你都可以嘗試下面的代碼

 csv_file = open(output_file, "w")
 writer = csv.writer(csv_file, delimiter=',', lineterminator="\n", 
                      quoting=csv.QUOTE_NONNUMERIC)
 for track in tracks:
   writer.writerow(track)

或者直接添加到列表

 writer.writerow(tracks)

管理數據框最簡單的選擇是 Pandas。

我不知道你的清單上有什么。 在任何情況下,pandas 都允許您從列表中創建數據框:

import pandas as pd
dataframe = pd.DataFrame([1,2,3],[4,5,6]], columns=['col1', 'col2', 'col3'])

   col1  col2  col3
0     1     2     3
1     4     5     6

在我編寫列表的地方,您應該插入自己的列表。 您可以看到每個列表都排成一行,但您也可以將它們添加為列:

df = pd.DataFrame({'name': ['Raphael', 'Donatello'],
                   'mask': ['red', 'purple'],
                   'weapon': ['sai', 'bo staff']})

然后,如果要將其導出為 csv,則只需使用to_csv()方法

您可以傳遞方法參數以將其直接寫入磁盤: pandas doc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM