刚刚进入 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] 的标量进行比较
但是错误仍然存在。这是什么原因造成的?我该如何解决?
** 后续问题 ** 另外,如何获取满足条件的行的索引值?
假设我有两个数据框,并且两个列的名称分别是:
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模块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”
即使正确的答案像“待匹配字符串”那样具有“提前期”,但它根本不与待匹配字符串匹配。为什么?并以某种方式使看起来不像待匹配字符串的其他匹配。为什么?我现在很笨。
所以我有这个脚本,使用pandas数据框主要是为了处理我的数据.当我处理大约10天的数据时,脚本可以工作; 但如果我做了11天的数据,它就会开始抱怨" MemoryError ".
我已经阅读了几乎所有与我认为相关的帖子.我觉得最相关的样本:
我已经将我的最大堆大小更改为1024(根据上面的帖子,1024是最大值?)并且我还将min增加到256(它是原来的1/2).
有关笔记本电脑的规格:
当我运行程序/脚本时,我没有看到内存消耗的飙升; 它很稳定......所以我现在很困惑.但我确实看到CPU消耗量大幅增加.这可能是个问题吗?
任何帮助表示赞赏!
我正在尝试删除字符串中的一些非常特殊的字符。我读过其他文章,例如:
但是这些不是我想要的。
可以说我的字符串如下:
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%肯定)
请帮助或指导我找到正确的职位。谢谢!
我试图摆脱第一个连字符后出现的所有数字/字符.这里有些例子:
15-103025-01
800-40170-02
68-4974-01
Run Code Online (Sandbox Code Playgroud)
我想要的输出:
15-
800-
68-
Run Code Online (Sandbox Code Playgroud)
我读过这些帖子:
但它们不是我正在寻找的东西,因为那些中提到的方法也会摆脱我的连字符(只留下前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)
但并没有像我预期的那样真正工作.
我还处于 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) 可以说我有一个看起来像这样的表:
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) 所以我读了一个包含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)