相关疑难解决方法(0)

python pandas loc - 过滤值列表

这应该是非常容易的,但我不能让它工作.

我想在两个值上过滤我的数据集.

#this works, when I filter for one value
df.loc[df['channel'] == 'sale'] 

#if I have to filter, two separate columns, I can do this
df.loc[(df['channel'] == 'sale')&(df['type']=='A')] 

#but what if I want to filter one column by more than one value?
df.loc[df['channel'] == ('sale','fullprice')] 
Run Code Online (Sandbox Code Playgroud)

这必须是一个OR声明吗?我可以在SQL中使用吗?

python filter loc pandas

15
推荐指数
1
解决办法
4万
查看次数

如何根据另一个数据框的条件创建新的数据框

刚刚进入 Python,所以希望我不会在这里问一个愚蠢的问题......

所以我有一个名为“df_complete”的 Pandas 数据框,假设有 100 行,包含名为:“type”、“writer”、“status”、“col a”、“col c”的列。我想创建/更新一个名为“temp_df”的新数据框,并根据使用“df_complete”值的条件创建它。

temp_df = pandas.DataFrame()

if ((df_complete['type'] == 'NDD') & (df_complete['writer'] == 'Mary') & (df_complete['status'] != '7')):
    temp_df['col A'] = df_complete['col a']
    temp_df['col B'] = 'good'
    temp_df['col C'] = df_complete['col c']
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我收到以下错误消息:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Run Code Online (Sandbox Code Playgroud)

我阅读了这个线程并将我的“和”更改为“&”: 系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

我还在这里阅读了此线程以将所有内容放在括号中:将 dtyped [float64] 数组与 Pandas DataFrame 中类型为 [bool] 的标量进行比较

但是错误仍然存​​在。这是什么原因造成的?我该如何解决?

** 后续问题 ** 另外,如何获取满足条件的行的索引值?

python dataframe pandas

7
推荐指数
1
解决办法
3万
查看次数

通过与列表进行比较来过滤掉 panda-df 的行

经常出现以下问题。假设我有一个数据框,其中一列可以采用离散值:

df = pd.DataFrame({'col1': [1, 2,3,4,5,6,7], 'col2': ["A", "B", "A", "C", "B", "A", "D"]})
Run Code Online (Sandbox Code Playgroud)

在这种情况下,col2可取的值A,B或C.我只想行,其中col2 等于A或B.我想下面的语法会的工作,

df["col2"] not in ["A", "B"]
Run Code Online (Sandbox Code Playgroud)

但是,这给了我错误 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

有没有一种巧妙的方法来过滤掉这些行?

python pandas

6
推荐指数
1
解决办法
1828
查看次数

使用python中的列表值过滤匹配列值的数据框

我有一个DataFrame喜欢以下内容:

import numpy as np
import pandas as pd
import string
import random

random.seed(42)

df = pd.DataFrame({'col1': list(string.ascii_lowercase)[:11],
                   'col2':[random.randint(1,100) for x in range(11)]})

df

   col1 col2
0   a   64
1   b   3
2   c   28
3   d   23
4   e   74
5   f   68
6   g   90
7   h   9
8   i   43
9   j   3
10  k   22
Run Code Online (Sandbox Code Playgroud)

我正在尝试基于过滤匹配值列表的前一个数据帧的行来创建一个新的数据帧。我已经尝试了下一段代码:

df_filt = df[df['col1'] in ['a','c','h']]
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误。我期待下一个结果:

df_filt

   col1 col2
0   a   64
1   c   28
2   h   9 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

6
推荐指数
2
解决办法
2万
查看次数

在熊猫列上应用条件以创建布尔值索引数组

我想从熊猫数据框中删除特定的行。通常,您可以使用类似的方法

df[df['some_column'] != 1234]
Run Code Online (Sandbox Code Playgroud)

什么df['some_column'] != 1234是创建索引新df的索引数组,因此仅显示具有值的行True

但是在某些情况下(例如我的情况),我看不到如何以这种方式表达条件,并且遍历大熊猫行太慢而不能被认为是可行的选择。

更具体地说,我想删除所有行,其中列的值也是字典中的键,这与上面的示例类似。

在一个完美的世界里,我会考虑类似

df[df['some_column'] not in my_dict.keys()]
Run Code Online (Sandbox Code Playgroud)

这显然是行不通的。有什么建议么?

python pandas

5
推荐指数
1
解决办法
385
查看次数

熊猫选择列中的值不以字符串开头的行

我有一个数据,我需要过滤掉以某个值s开头的任何行- 强调复数:

与文件 data.xlsx 中显示的完全相同的数据下方

Name                Remains
GESDSRPPZ0161       TRUE
RT6000996           TRUE
RT6000994           TRUE
RT6000467           TRUE
RT6000431           TRUE
MCOPSR0034          FALSE
MCOPSR0033          FALSE
Run Code Online (Sandbox Code Playgroud)

我需要能够返回名称MCO、GE等开头的数据帧。

import pandas as pd
import numpy as np

### data
file = r'C:\Users\user\Desktop\data.xlsx'

data  = pd.read_excel(file, na_values = '')
data['name'] = data['name'].str.upper()

prefixes = ['IM%','JE%','GE%','GV%','CHE%','MCO%']

new_data = data.select(lambda x: x not in prefixes)


new_data.shape
Run Code Online (Sandbox Code Playgroud)

最后一次调用返回与我开始时完全相同的数据集。

我试过:

大熊猫使用startswith从Dataframe中选择

但如果字符串在其他地方(不仅以开头),它会排除数据

df = df[df['Column Name'].isin(['Value']) == False]
Run Code Online (Sandbox Code Playgroud)

如果我确切地知道有问题的字符串,上面的答案会起作用,但是它会改变(公共部分是 MCOxxxxx、GVxxxxxx、GExxxxx...)

这个也发生了同样的事情:

如何为 Pandas 数据框实现“in”和“not in”

因为我必须传递的值必须是准确的。有什么办法可以使用与此处相同的逻辑(是否有与 …

python-3.x pandas anaconda jupyter-notebook

5
推荐指数
1
解决办法
5336
查看次数

根据列值删除Pandas中的DataFrame行 - 要删除的多个值

我有一个值列表(事先不知道,在Python列表中),我的Panda DataFrame中的列不能包含所有行.

Web上的所有配方(如此)都显示如何只使用一个要排除的值,但我有多个要排除的值.我该怎么做?

请注意,我无法在我的代码中硬编码要排除的值.

谢谢!

python filter dataframe pandas

3
推荐指数
1
解决办法
1945
查看次数

熊猫未在“列”中找到元素

熊猫似乎没有找到列表中的所有元素:

df = pd.DataFrame({"rid": ["125264429", "a"], "id": [1, 2]})
1 in df["id"]                # <- expect True, get True
"125264429" in df["rid"]     # <- expect True, get False
df[df["rid"] == "125264429"] # <- yields result
Run Code Online (Sandbox Code Playgroud)

我确定对此行为有一个完全合理的解释,但我似乎找不到。似乎最后两列相互矛盾。它是否必须对“ rid”列的数据类型是对象这一事实做些什么?

python pandas

3
推荐指数
1
解决办法
65
查看次数

从一列中的唯一值创建 Pandas DataFrame

我有一个包含 1000 行的 Pandas 数据框。它有一Names列包括客户姓名及其记录。我想根据每个客户的唯一名称为每个客户创建单独的数据框。我把唯一的名字放到了一个列表中

customerNames = DataFrame['customer name'].unique().tolist() 这给出了以下数组

['Name1', 'Name2', 'Name3, 'Name4']
Run Code Online (Sandbox Code Playgroud)

我通过捕获上面列表中的唯一名称并为每个名称创建数据帧并将数据帧分配给客户名称来尝试循环。因此,例如,当我编写时Name3,它应该将Name3的数据作为单独的数据框提供

for x in customerNames:
    x = DataFrame.loc[DataFrame['customer name'] == x]
x
Run Code Online (Sandbox Code Playgroud)

以上几行仅Name4作为数据帧结果返回了数据帧,但跳过了其余部分。

我怎么解决这个问题?

python pandas

2
推荐指数
2
解决办法
2万
查看次数

将 pandas 组保存到单独的 CSV 文件

是否可以dfcsv's不使用.to_csv. 使用下面的代码,我手动返回所需的值并将其导出到 csv。如果我只有几个文件要导出,这是可以的,但如果有大量文件或文件名不断更改数据集,那就会很麻烦。

如果您有特定的值列表并将其导出到 csv,是否有更有效的方法来返回所需的值?

import pandas as pd

d = ({
    'C' : ['08:00:00','XX','08:10:00','XX','08:41:42','XX','08:50:00','XX', '09:00:00', 'XX','09:15:00','XX','09:21:00','XX','09:30:00','XX','09:40:00','XX'],
    'D' : ['Home','Home','Home','Home','Away','Away','Shops','Shops','Away','Away','Shops','Shops','Home','Home','Away','Away','Home','Home'],
    'E' : ['Num:','','Num:','','Num:','','Num:','','Num:', '','Num:','','Num:','','Num:', '','Num:', ''],
    'F' : ['1','','1','','1','','1','','1', '','2','','2','','1', '','2',''],   
    'A' : ['A','','A','','A','','A','','A','','A','','A','','A','','A',''],           
    'B' : ['Stop','','Res','','Stop','','Start','','Res','','Stop','','Res','','Start','','Start','']
    })

df = pd.DataFrame(data=d)

#List of designated places
values = ['Home', 'Away', 'Shops']

#Export to csv
Home = df.loc[df['D'] == 'Home'].to_csv('Home.csv')
Away = df.loc[df['D'] == 'Away'].to_csv('Away.csv')
Shops = df.loc[df['D'] == 'Shops'].to_csv('Shops.csv')
Run Code Online (Sandbox Code Playgroud)

python dataframe export-to-csv pandas

1
推荐指数
1
解决办法
1931
查看次数