Python - 使用函数和创建数据框
Python - Using functions and creating dataframes
我是 python 的新手,我已经开始了 working/creating 个不同的项目。
在一个项目中,我正在使用 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
如果您 post 您的输出将很容易识别。但是您可以尝试以下代码的任何方式
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
我是 python 的新手,我已经开始了 working/creating 个不同的项目。
在一个项目中,我正在使用 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
如果您 post 您的输出将很容易识别。但是您可以尝试以下代码的任何方式
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