调整“数据框”列中的列表元素

时间:2019-02-16 13:56:45

标签: python pandas

从API获取数据,对于一项来说,有很多数据,所以我决定将它们放入列表中。现在,我的数据框的列包含List元素。我想编写一个检查某些条件的函数,例如根据能力和统计数据得出的最佳人选。类似于whoIsTheBest('fire-punch', 'speed'),其中,“-move”(移动)列中有打孔功能,“ speed”(速度)列中有速度值(它具有最快的速度,并且可以“移动”)。

我在从“移动”列访问元素列表元素时遇到问题。这就是我获取数据的方式:

for x in elements:
    url = "https://pokeapi.co/api/v2/pokemon/" + str(x["entry_number"]) + "/"
    get_pokemon = requests.get(url)
    get_pokemon_json = get_pokemon.json()
    d = {'id': x["entry_number"], 
         'name': x["pokemon_species"]["name"],
         'special_defense': get_pokemon_json["stats"][1]["base_stat"],
         'special_attack': get_pokemon_json["stats"][2]["base_stat"],
         'defense': get_pokemon_json["stats"][3]["base_stat"],
         'attack': get_pokemon_json["stats"][4]["base_stat"],
         'hp': get_pokemon_json["stats"][5]["base_stat"],
         'move': list(y['move']['name'] for y in get_pokemon_json['moves']),
         'type': list(z['type']['name'] for z in get_pokemon_json['types'])
        }  
    all_data.append(d)
df1 = pd.DataFrame(all_data)



             move        name  \
0    [razor-wind, swords-dance, cut, bind, vine-whi...   bulbasaur   
1    [swords-dance, cut, bind, vine-whip, headbutt,...     ivysaur 

尝试以下操作:

if 'fire-punch' in str(df1["move"]):

但得到TypeError: 'list' object is not callable

是否可以使用更好的方法来创建列值而不是列表,或者是否可以通过某种方式访问​​每个元素?元素是否放在[]括号中?

1 个答案:

答案 0 :(得分:1)

df1 [“ move”]是一列,并具有一组值(可以将每个熊猫视为Series)。所以它不是字符串。那就是抛出错误。

相反,您可以像这样检查它:

C:\Users\xxxxx>dir /x E:\Dropbox\ROCKET~1\SICILI~1.FDX
 Volume in drive E is Enigma
 Volume Serial Number is D45D-0655

 Directory of E:\Dropbox\ROCKET~1

2013-04-17  18:07            17,125 SICILI~1.FDX Sicilian fennel and orange salad with red onion and mint.fdx

C:\Users\xxxxx>dir /x "E:\Dropbox\Rocket Cottage\Sicilian fennel and orange salad with red onion and mint.fdx"
 Volume in drive E is Enigma
 Volume Serial Number is D45D-0655

 Directory of E:\Dropbox\Rocket Cottage

2013-04-17  18:07            17,125 SICILI~1.FDX Sicilian fennel and orange salad with red onion and mint.fdx

此外,在这种情况下,我看到每一行都是for item in df1.move.values: if 'fire-punch' in item: print("Yes, its found in: ", item)