小编alw*_*ons的帖子

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

刚刚进入 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万
查看次数

Python Pandas:如何根据“ OR”条件进行合并?

假设我有两个数据框,并且两个列的名称分别是:

table 1 columns:
[ShipNumber, TrackNumber, ShipDate, Quantity, Weight]
table 2 columns:
[ShipNumber, TrackNumber, AmountReceived]
Run Code Online (Sandbox Code Playgroud)

我想基于ShipNumber和TrackNumber合并两个表。但是,如果我只是以以下方式使用合并(伪代码,而不是真实代码):

tab1.merge(tab2, "left", on=['ShipNumber','TrackNumber'])
Run Code Online (Sandbox Code Playgroud)

那么,这意味着两个表中的ShipNumber和TrackNumber列中的值都必须匹配。

但是,就我而言,有时ShipNumber列值将匹配,有时TrackNumber列值将匹配;只要两个值之一匹配一行,我就希望合并发生。

换句话说,如果选项卡1中的第1行ShipNumber与选项卡2中的第3行ShipNumber相匹配,但是两个表的两个记录中的TrackNumber不匹配,我仍然要匹配两个表中的两行。

因此,基本上这是一个“或”或“匹配”条件(伪代码):

if tab1.ShipNumber == tab2.ShipNumber OR tab1.TrackNumber == tab2.TrackNumber:
    then merge
Run Code Online (Sandbox Code Playgroud)

希望我的问题有意义...真的很感谢您的帮助!

正如建议的那样,我调查了这篇文章: Python pandas与OR逻辑合并 但是我认为这不是完全相同的问题,因为该文章中的OP具有映射文件,因此他们可以简单地进行2次合并来解决此问题。但是我没有映射文件,相反,我有两个具有相同键列(ShipNumber,TrackNumber)的df

python merge dataframe pandas

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

Python Fuzzywuzzy的process.extract():它是如何工作的?

我试图了解python模块Fuzzywuzzy的功能process.extract()如何工作?

我主要在这里阅读有关Fuzzywuzzy软件包的信息:http ://chairnerd.seatgeek.com/fuzzywuzzy-fuzzy-string-matching-in-python/ ,这是一篇很棒的文章,解释了尝试进行模糊匹配时的不同情况。他们讨论了部分字符串相似性的几种方案:

1)乱序
2)令牌排序
3)令牌集

然后,从这篇文章中:https : //pathindependence.wordpress.com/2015/10/31/tutorial-fuzzywuzzy-string-matching-in-python-improving-merge-accuracy-across-data-products-and-naming -conventions /我学习了如何使用Fuzzywuzzy的process.extract()函数基本上选择前k个匹配项。

我找不到太多有关process.extract()函数如何工作的信息。这是我在其GitHub页面(https://github.com/seatgeek/fuzzywuzzy/blob/master/fuzzywuzzy/process.py)上找到的定义/信息,该功能是:

在选择的列表或词典中查找最佳匹配,返回包含匹配及其得分的元组列表。如果使用字典,则还返回每个匹配项的键。

但是,它没有提供有关如何找到最佳方法的详细信息?是否需要我在上面提到的所有3个方案中找到该方案?

我之所以问是因为,当我使用此函数时,有时会有两个非常相似但不匹配的字符串。

例如在我当前的样本数据集中,要匹配的字符串

“总补货提前期(以工作日为单位)”

它与

“ PLANNING_TIME_FENCE_CODE”,“ BUILD_IN_WIP_FLAG”

但不是(正确的答案)

“ FULL_LEAD_TIME”

即使正确的答案像“待匹配字符串”那样具有“提前期”,但它根本不与待匹配字符串匹配。为什么?并以某种方式使看起来不像待匹配字符串的其他匹配。为什么?我现在很笨。

python string fuzzywuzzy

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

即使在堆大小增加/重置之后,PyCharm仍然会抛出"内存错误"

所以我有这个脚本,使用pandas数据框主要是为了处理我的数据.当我处理大约10天的数据时,脚本可以工作; 但如果我做了11天的数据,它就会开始抱怨" MemoryError ".

我已经阅读了几乎所有与我认为相关的帖子.我觉得最相关的样本:

  1. PyCharm耗尽内存
  2. https://superuser.com/questions/919204/how-can-i-increase-the-memory-heap-in-pycharm/1141412#1141412?newreg=8c1cf6510b64441a987d6ef0e0cab23d
  3. http://web.archive.org/web/20160503095110/http://www.avricot.com/blog/?post/2010/05/03/Get-started-with-java-JVM-memory-(heap, -stack,-Xss-XMS-XMX到厦门......)

我已经将我的最大堆大小更改为1024(根据上面的帖子,1024是最大值?)并且我还将min增加到256(它是原来的1/2).

有关笔记本电脑的规格:

  • 32GB RAM.
  • CPU = 2个核心
  • 最大速度= 2.81GHz
  • 逻辑处理器= 4

当我运行程序/脚本时,我没有看到内存消耗的飙升; 它很稳定......所以我现在很困惑.但我确实看到CPU消耗量大幅增加.这可能是个问题吗?

任何帮助表示赞赏!

python out-of-memory pycharm

6
推荐指数
0
解决办法
1950
查看次数

R如何删除字符串中的非常特殊字符?

我正在尝试删除字符串中的一些非常特殊的字符。我读过其他文章,例如:

  1. 从R中的字符串中删除所有特殊字符?
  2. 如何从字符串中删除特殊字符?

但是这些不是我想要的。

可以说我的字符串如下:

s = "who are í ½í¸€ bringing?"
Run Code Online (Sandbox Code Playgroud)

我试过以下:

test = tm_map(s, function(x) iconv(enc2utf8(x), sub = "byte"))
test = iconv(s, 'UTF-8', 'ASCII')
Run Code Online (Sandbox Code Playgroud)

以上都不起作用。

编辑: 我正在寻找一个通用的解决方案!我不能(并且最好不要)手动识别所有特殊字符。

这些表情符号也可能导致这些非常特殊的字符(并非100%肯定)

请帮助或指导我找到正确的职位。谢谢!

r special-characters

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

仅保留FIRST连字符和连字符本身之前的数字

我试图摆脱第一个连字符后出现的所有数字/字符.这里有些例子:

15-103025-01
800-40170-02
68-4974-01
Run Code Online (Sandbox Code Playgroud)

我想要的输出:

15-
800-
68-
Run Code Online (Sandbox Code Playgroud)

我读过这些帖子:

  1. 使用gsub在R中的空格之前提取字符串
  2. 截断R中某个字符的字符串
  3. 在可以出现零次或多次的字符之后截断R中字符串的结尾

但它们不是我正在寻找的东西,因为那些中提到的方法也会摆脱我的连字符(只留下前2或3个数字).

这是我到目前为止所尝试的:

gsub(pattern = '[0-9]*-$', replacement = "", x = data$id)
grep(pattern = '[0-9]*-', replacement = "", x = data$id)
regexpr(pattern = '[0-9]*-', text = data$id)
Run Code Online (Sandbox Code Playgroud)

但并没有像我预期的那样真正工作.

regex r

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

如何在 Python 中将 for 循环转换为并行处理?

我还处于 Python 学习的早期阶段。如果这个问题听起来很愚蠢,请提前道歉。

我有这组数据(表格格式),我想向其中添加几个计算列。基本上我有一些位置 lon/lat 和目的地 lon/lat,以及各自的数据时间,我正在计算每对之间的平均速度。

示例数据如下所示:

print(data_all.head(3))

   id    lon_evnt   lat_evnt          event_time  \
0   1 -179.942833  41.012467 2017-12-13 21:17:54   
1   2 -177.552817  41.416400 2017-12-14 03:16:00   
2   3 -175.096567  41.403650 2017-12-14 09:14:06   

  dest_data_generate_time   lat_dest    lon_dest  \
0 2017-12-13 22:33:37.980  37.798599 -121.292193   
1 2017-12-14 04:33:44.393  37.798599 -121.292193   
2 2017-12-14 10:33:51.629  37.798599 -121.292193  

                             address_fields_dest  \
0  {'address': 'Nestle Way', 'city': 'Lathrop...      
1  {'address': 'Nestle Way', 'city': 'Lathrop...      
2  {'address': 'Nestle Way', 'city': 'Lathrop...      
Run Code Online (Sandbox Code Playgroud)

然后我将 lon/lat 压缩在一起:

data_all['ping_location'] = list(zip(data_all.lon_evnt, data_all.lat_evnt))
data_all['destination'] = …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing pandas

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

pandas:如何按多列分组并在多列上执行不同的聚合?

可以说我有一个看起来像这样的表:

Company      Region     Date           Count         Amount
AAA          XXY        3-4-2018       766           8000
AAA          XXY        3-14-2018      766           8600
AAA          XXY        3-24-2018      766           2030
BBB          XYY        2-4-2018        66           3400
BBB          XYY        3-18-2018       66           8370
BBB          XYY        4-6-2018        66           1380
Run Code Online (Sandbox Code Playgroud)

我想摆脱日期列的,然后由公司与区域聚集寻找伯爵和金额之和的平均值.

预期产量:

Company      Region     Count         Amount
AAA          XXY        766           18630
BBB          XYY        66            13150
Run Code Online (Sandbox Code Playgroud)

我在这里查看了这篇文章,还有很多其他在线帖子,但看起来他们只是执行一种聚合操作(例如,我可以通过多列聚合,但只能产生一个列输出作为总和OR计数,而不是和和计数)

从Pandas聚合重命名结果列("FutureWarning:使用带重命名的dict已弃用")

有人可以帮忙吗?

我做了什么:

我在这里关注这篇文章:

https://www.shanelynn.ie/summarising-aggregation-and-grouping-data-in-python-pandas/

但是,当我尝试使用本文中提供的方法(在文章末尾)时,通过使用字典:

aggregation = {
    'Count': {
        'Total Count': 'mean'
    },
    'Amount': {
        'Total Amount': 'sum'
    }
}
Run Code Online (Sandbox Code Playgroud)

我会收到这个警告:

FutureWarning: using …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

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

Python pandas.core.indexing.IndexingError:提供了Unalignable boolean Series键

所以我读了一个包含29列的数据表,并在一个索引列中添加(总共30个).

Data = pd.read_excel(os.path.join(BaseDir, 'test.xlsx'))
Data.reset_index(inplace=True)
Run Code Online (Sandbox Code Playgroud)

然后,我希望将数据子集化为仅包含列名称包含"ref"或"Ref"的列; 我从另一个Stack帖子获得了以下代码:

col_keep = Data.ix[:, pd.Series(Data.columns.values).str.contains('ref', case=False)]
Run Code Online (Sandbox Code Playgroud)

但是,我不断收到此错误:

    print(len(Data.columns.values))
    30
    print(pd.Series(Data.columns.values).str.contains('ref', case=False))
    0     False
    1     False
    2     False
    3     False
    4     False
    5     False
    6     False
    7     False
    8     False
    9     False
    10    False
    11    False
    12    False
    13    False
    14    False
    15    False
    16    False
    17    False
    18    False
    19    False
    20    False
    21    False
    22    False
    23    False
    24     True
    25     True
    26     True
    27     True
    28    False
    29    False
    dtype: bool …
Run Code Online (Sandbox Code Playgroud)

python pandas

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