我正试图更好地理解Python以及为什么我会收到错误。
我有一个带有国家名称的数据框,我想过滤数据集,只显示那些没有重复项的数据。我进入:
df[df['Country Name'].value_counts() == 1]
然而,我得到一个错误
Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match
似乎[df['Country Name'].value_counts()==1]
创建了一个列表,该列表还显示了国家名称和布尔值,而不仅仅是我所期望的布尔值。
此外,我尝试只对一个国家进行过滤,即,df[df['country Name']=='United']
,效果非常好。
我只是想理解为什么在一个场景中它起作用,而在另一个场景中它不起作用。我确实注意到后者有一个从0开始的索引,所以也许这就是原因。我只是不明白为什么我在前面的例子中没有收到相同的索引。
有人能解释一下吗?
试试这个-
示例数据为dataframe
>>> df = pd.DataFrame ({"Country Name": ["United States", "Canada", "Spain", "France", "India", "Greece", "United States","Canada"], "Exports": ["beef","corn","cattle","cheese","cattle","cheese","pork","maple syrup"]})
显示dataframe
>>> df
Country Name Exports
0 United States beef
1 Canada corn
2 Spain cattle
3 France cheese
4 India cattle
5 Greece cheese
6 United States pork
7 Canada maple syrup
除了使用count()
之外,还可以使用groupby()
按“国家/地区名称”返回计数
>>> df.groupby("Country Name")["Country Name"].count()
Country Name
Canada 2
France 1
Greece 1
India 1
Spain 1
United States 2
Name: Country Name, dtype: int64
只显示行
count()==1
>>> df[df['Country Name'].map(df.groupby('Country Name')["Country Name"].count()) == 1]
Country Name Exports
2 Spain cattle
3 France cheese
4 India cattle
5 Greece cheese
这里有一个解释...
你提供了国家名称...
df[df['Country Name'] == 'United States']
让我们把这个分开,
df['Country Name'] == 'United States'
为您提供一个系列,该系列的值与原始数据帧的布尔数据长度相同。
现在,当你这么做的时候
df[df['Country Name'] == 'United States']
您将得到只包含“美国”的数据帧,因为熊猫直接比较布尔值,并以“真实”返回行。
现在来看看价值统计。。
df[df['Country Name'].value_counts() == 1]
把这个分开,
df['Country Name'].value_counts() == 1
将仅返回唯一的国家名称,如果它们的计数为==1,则返回布尔格式。如果检查长度,它与df的原始长度不匹配。
现在,当您尝试对数据帧进行子集划分时,您会得到所得到的错误。
解决方案。删除那些像巴勃罗在回答中提到的不止一次出现的国家(我没有尝试过。注意keep=False)。或者,试试下面的。。
如果您想要显示仅出现一次的国家的行,可以尝试地图方式。。
df[df['Country Name'].map(df['Country Name'].value_counts()) == 1]
这将返回数据框,其中包含恰好出现一次的国家。
或
df[df['Country Name'].isin(df['Country Name'].value_counts()[df['Country Name'].value_counts()==1].index)]
您的解决方案不起作用,因为生成的数据帧比原始数据帧短,它们必须具有相同的长度,然后它可以根据布尔值逐行过滤。
另外,我很确定您实际上正在寻找pandas.DataFrame.drop\u副本
:
df.drop_duplicates(subset=['Country Name'], keep = False)
它实际上会删除重复的值,在这种情况下,您只需删除“国家/地区名称”
,您不想保留第一次或最后一次出现的值,这是保留
的其他选项,然后保留=False
。
这里有文档。
我希望连接的文件夹中有大约500个数据集。它们都有相同的列名:“年”、“邮政编码”、“Var1”、“Var2”、“Var3”。 我使用以下代码循环浏览文件夹中的文件: 当我输出数据集时,仅显示2019年的数据集和邮政编码000001。我打印了整个文件列表,我想要连接的数据集都在那里。有没有洞察到为什么会出现这种情况?谢谢
我尝试运行上述代码。但它不更新字符串。并且不显示任何错误。数据帧中存在“ABW”数据点。我也给出了数据集的链接。https://github.com/pran9957/world-bank-data.git
我需要从不同的字典中创建一个熊猫数据框架,其中键必须作为数据框架内的列名。如果数据帧没有将键列为列,则必须动态创建键,并将其作为新列附加到数据帧。 我希望输入为, 输出应该是,, 循环的第一次迭代将键作为数据框的列名称,如果没有数据框,则创建值作为第一行的数据框。 第二次迭代检查键是否作为列出现在数据帧中,如果已经出现则插入,否则创建列并插入值作为第二行。 我确实不知道如何在python中动态运行
字典的键是日期,值是一个长度不同的列表 例如,字典是 我想要的是像这样的数据帧
当我像这样创建时,它工作得很好: 但当我尝试发送消息创建if时,它会抛出一个异常: 发送功能: 函数有什么问题?