Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一列元组上使用df.isin()函数_Python_Pandas_List_Plotly_Coordinates - Fatal编程技术网

Python 在一列元组上使用df.isin()函数

Python 在一列元组上使用df.isin()函数,python,pandas,list,plotly,coordinates,Python,Pandas,List,Plotly,Coordinates,我有一个由维基百科文章和地理坐标以及一些统计数据组成的数据框架。列“Availability”包含文章可用的语言的元组(从选择中) 我想做的是用plotly绘制一个气泡图,图例是这些语言中可用的。例如,在['ca','es']中,您将有[],['ca'],['es'],['ca'],'es']的意思是不可用,仅在加泰罗尼亚语中可用,仅在西班牙语中可用,或分别在这两种语言中可用 问题是,当尝试使用dataframe.isin()使用这些组合创建仅包含匹配行的数据帧时,它总是返回空df。 数据帧的列

我有一个由维基百科文章和地理坐标以及一些统计数据组成的数据框架。列“Availability”包含文章可用的语言的元组(从选择中)

我想做的是用plotly绘制一个气泡图,图例是这些语言中可用的。例如,在
['ca','es']
中,您将有
[],['ca'],['es'],['ca'],'es']
的意思是不可用,仅在加泰罗尼亚语中可用,仅在西班牙语中可用,或分别在这两种语言中可用

问题是,当尝试使用dataframe.isin()使用这些组合创建仅包含匹配行的数据帧时,它总是返回空df。 数据帧的列包括:
栏目:[法文标题、Qitem、页面浏览量、第1页、第2页、可用性、纬度、经度、文本]

这是我的密码:

    fig = go.Figure()
    scale = 500
    for comb in combinations:

        df_sub = df[df['Availability'].isin(tuple(comb))] #The problem is here. This returns an empty DF
        
        if(len(df_sub.index)) == 0: continue #There are no occurrencies with that comb
        fig.add_trace(go.Scattergeo(
            lat=df_sub['Lat'],
            lon=df_sub['Lon'],
            text=df_sub['Text'],
            marker = dict(
                size = df[order_by],
                sizeref=2. * max(df[order_by]) / (scale ** 2),
                line_color='rgb(40,40,40)',
                line_width=0.5,
                sizemode='area'
            ), name = comb #Here is the underlying restriction. I need to separate the traces according to their availability.
        ))
PS:我想这与熊猫在使用列表或元组作为列值时效果不太好有关,但它没有弄清楚如何实现我想要的。你们有谁知道吗?先谢谢你Comb显示为字符串或字符串元组:
('es','ca')
,但是当我打印df['Availability]中的值时,它们看起来像
(es,ca)

示例数据帧(很抱歉我不熟悉堆栈溢出的样式)**

法文标题Qitem页面浏览量\
0立邦Q822 53903
1法国Q142 25728
2 Biélorussie Q184 21688
3Žle Maurice Q2656389 20478
4杜邦利贡区事务委员会Q16010109 16075
第1页第2页\
0勒巴诺勒巴诺勒巴诺
1 Francia França
2 Bierorrusia BielerÃssia
3 Mauricio岛和Illa Maurici岛
4杜邦利贡地区的Asesinatos和DESPARICIONES
可用性纬度\
0(加利福尼亚州东南部)33.90000000 35.53330000
1(加利福尼亚州es)48.86700000 2.3265000
2(加利福尼亚州东部)53.528333333 28.04666667
3(东加利福尼亚州)20.30084200 57.58209200
4(es,)47.23613230-1.56848610
正文
0李班(33.90000000,35.53330000)
Q822 1法国(48.86700000,2.3265000)
Q142 2 Biélorussie
(53.52833333328.04666667)
Q184 3Žle Maurice
(-20.30084200,57.58209200)
Q2656389 4杜邦利贡事务委员会(47.23613230,-1.56848610)
Q16010109
您可以使用
系列。应用()
来实现您的目标:

df['Availability'].apply(lambda x: 'ca' in x)

如果元组中有
'ca'
,则返回
True
。它可以很容易地修改以返回一些标签,例如,
Catalan

最后,我将元组变成了一个列表,因为由于没有使用
df.isin()
,它不会引发
不可破坏类型错误
,并且能够通过组合使用
df.apply()
(感谢mkos的想法):


您可以看到结果。

是否可以包含数据帧的示例?这将帮助其他开发人员重现您的问题,或者更好地了解您的问题变得确定的原因errors@DerekO是的,我忘了。我用df.head()函数进行了编辑,谢谢。我尝试了df_sub=df[df['Availability'].apply(lambda x:tuple(comb)in x)],但没有成功。我需要知道的是列中的值是否与我的元组完全相同,而不是元组中是否有语言。通过这种方式,我可以区分两种语言中存在的文章、仅在es中存在的文章、仅在ca中存在的文章或在这些语言中不存在的文章。
df['Availability'].apply(lambda x: 'ca' in x)
 for comb in combinations:

    if len(comb) ==0:
        name ='Not available'
        df_sub = df[df['Availability'].apply(lambda x:  len(x)==0)]
    else:
        df_sub = df[df['Availability'].apply(lambda x: set(comb) == set(x))]
        name = ','.join(comb)
    if(len(df_sub.index)) == 0: continue
   

    fig.add_trace(go.Scattergeo(
        lat=df_sub['Lat'],
        lon=df_sub['Lon'],
        text=df_sub['Text'],
        marker = dict(
            size = df[order_by],
            sizeref=2. * max(df[order_by]) / (scale ** 2),
            line_color='rgb(40,40,40)',
            line_width=0.5,
            sizemode='area'
        ), name =name
    ))