- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下问题需要帮助。我的 csv 文件中有 310 条记录,其中包含一些有关错误的信息。在另一个 csv 文件中,我有 80 万条记录,其中包含有关袋子的统计信息(可能导致错误的事件)。
通过下面的脚本,我试图
我的问题是我是否可以使用 numpy 或其他任何东西以更有效的方式实现这一点。由于统计数据的大小,当前方法需要永远运行
任何正确方向的帮助或提示将不胜感激。提前致谢
dataset = pd.read_csv('310_records.csv')
dataset1 = pd.read_csv('800K_records.csv')
cols_error = dataset.iloc[:, [0, 1, 2, 3, 4, 5, 6]]
cols_stats = dataset1.iloc[:, [1, 2, 3, 4, 5, 6, 7, 8, 9]]
cols_stats['Fault'] = ''
cols_stats['Created'] = ''
for i, error in cols_error.iterrows():
fault_created = error [0]
fault_ucs = error [1]
fault_dn = error [2]
fault_epoch_end = error [3]
fault_epoch_begin = error [4]
fault_code = error [6]
for index, stats in cols_stats.iterrows():
stats_epoch = stats[0]
stats_ucs = stats[5]
stats_dn = stats[7]
print("error:", i, " Stats:", index)
if(stats_epoch >= fault_epoch_begin and stats_epoch <= fault_epoch_end):
if(stats_dn == fault_dn):
if(stats_ucs == fault_ucs):
cols_stats.iloc[index, 9] = fault_code
cols_stats.iloc[index, 10] = fault_created
else:
cols_stats.iloc[index, 9] = 0
cols_stats.iloc[index, 10] = fault_created
cols_stats.to_csv('datasets/dim_stats_error.csv', sep=',', encoding='utf-8')
最佳答案
首先:您确定您的代码能够实现您想要的功能吗?在我看来,您不断循环统计数据,因此,如果您发现与 bug #1 匹配的 bug,则稍后可以用 bug #310 覆盖统计数据的相应附录。目前尚不清楚您应该如何处理没有匹配错误事件的统计事件,但目前您正在为这些数据点存储 fault_created
列,这在某种程度上是任意的。更不用说每次检查每个事件以查找每个错误时所做的额外工作。
速度缓慢的原因是您根本没有利用 pandas 的功能。在 numpy 和 pandas 中,部分性能来自内存管理,其余部分来自矢量化。通过将大部分工作从 native Python 循环推送到矢量化函数(运行编译代码),您将开始看到速度的巨大提升。
我不确定是否有一种先进的方法来矢量化您的所有工作,但由于您正在查看 310 与 800k 项,因此对错误和错误进行循环似乎是完全合理的向量化内循环。关键是逻辑索引,使用它您可以一次寻址所有 800k 项:
for i, error in cols_error.iterrows():
created, ucs, dn, epoch_end, epoch_begin, _, code = error
inds = ( (epoch_begin <= cols_stats['epoch']) &
(cols_stats['epoch'] <= epoch_end) &
(cols_stats['dn'] == dn) &
(cols_stats['ucs'] == ucs) )
cols_stats['Fault'][inds] = code
cols_stats['Created'][inds] = created
cols_stats.to_csv('datasets/dim_stats_error.csv', sep=',', encoding='utf-8')
请注意,上面的内容不会将不匹配的列设置为不重要的内容,因为我认为您的问题中没有合理的示例。无论您想要设置什么默认值都应该独立于错误列表,因此您应该在整个匹配考验之前设置这些值。
请注意,我对您的代码进行了一些修改。您可以使用解包赋值来设置 error
中的所有这些值,并删除这些变量的前缀使这一点更加清晰。我们可以处理前缀,因为我们没有为统计数据帧定义单独的变量。
正如您所看到的,查找给定错误的所有匹配统计项的条件可以根据矢量化逻辑索引操作来定义。生成的名为 inds
的 pandas Series
统计数据帧的每一行都有一个 bool 值。这可用于分配名为 'Fault'
和 'Created'
的列子集。请注意,您可以(并且可能应该)按名称索引列,至少我发现这更加更加清晰和方便。
由于对于每个错误,您的代码
和创建的
都是标量(可能是字符串),因此矢量化赋值cols_stats['Fault'][inds] = code
和 cols_stats['Created'][inds] = created
将 cols_stats
的每个索引项设置为这些标量。
我相信结果应该与以前相同,但速度更快,但代价是增加了内存使用。
可以在初始化中进行进一步的简化,但如果没有 MCVE,就很难说具体细节。至少你可以使用切片表示法:
cols_error = dataset.iloc[:, :7]
cols_stats = dataset1.iloc[:, 1:10]
但很可能您只是忽略了几列,在这种情况下,删除
这些列可能会更清楚。例如,如果在数据集中
中,您有一个名为“垃圾”的第七列被忽略,则只需设置
cols_error = dataset.drop('junk', axis=1)
关于python - 通过 pandas 数据框进行有效循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43632925/
pandas.crosstab 和 Pandas 数据透视表似乎都提供了完全相同的功能。有什么不同吗? 最佳答案 pivot_table没有 normalize争论,不幸的是。 在 crosstab
我能找到的最接近的答案似乎太复杂:How I can create an interval column in pandas? 如果我有一个如下所示的 pandas 数据框: +-------+ |
这是我用来将某一行的一列值移动到同一行的另一列的当前代码: #Move 2014/15 column ValB to column ValA df.loc[(df.Survey_year == 201
我有一个以下格式的 Pandas 数据框: df = pd.DataFrame({'a' : [0,1,2,3,4,5,6], 'b' : [-0.5, 0.0, 1.0, 1.2, 1.4,
所以我有这两个数据框,我想得到一个新的数据框,它由两个数据框的行的克罗内克积组成。正确的做法是什么? 举个例子:数据框1 c1 c2 0 10 100 1 11 110 2 12
TL;DR:在 pandas 中,如何绘制条形图以使其 x 轴刻度标签看起来像折线图? 我制作了一个间隔均匀的时间序列(每天一个项目),并且可以像这样很好地绘制它: intensity[350:450
我有以下两个时间列,“Time1”和“Time2”。我必须计算 Pandas 中的“差异”列,即 (Time2-Time1): Time1 Time2
从这个 df 去的正确方法是什么: >>> df=pd.DataFrame({'a':['jeff','bob','jill'], 'b':['bob','jeff','mike']}) >>> df
我想按周从 Pandas 框架中的列中累积计算唯一值。例如,假设我有这样的数据: df = pd.DataFrame({'user_id':[1,1,1,2,2,2],'week':[1,1,2,1,
数据透视表的表示形式看起来不像我在寻找的东西,更具体地说,结果行的顺序。 我不知道如何以正确的方式进行更改。 df示例: test_df = pd.DataFrame({'name':['name_1
我有一个数据框,如下所示。 Category Actual Predicted 1 1 1 1 0
我有一个 df,如下所示。 df: ID open_date limit 1 2020-06-03 100 1 2020-06-23 500
我有一个 df ,其中包含与唯一值关联的各种字符串。对于这些唯一值,我想删除不等于单独列表的行,最后一行除外。 下面使用 Label 中的各种字符串值与 Item 相关联.所以对于每个唯一的 Item
考虑以下具有相同名称的列的数据框(显然,这确实发生了,目前我有一个像这样的数据集!:() >>> df = pd.DataFrame({"a":range(10,15),"b":range(5,10)
我在 Pandas 中有一个 DF,它看起来像: Letters Numbers A 1 A 3 A 2 A 1 B 1 B 2
如何减去两列之间的时间并将其转换为分钟 Date Time Ordered Time Delivered 0 1/11/19 9:25:00 am 10:58:00 am
我试图理解 pandas 中的下/上百分位数计算,但有点困惑。这是它的示例代码和输出。 test = pd.Series([7, 15, 36, 39, 40, 41]) test.describe(
我有一个多索引数据框,如下所示: TQ bought HT Detailed Instru
我需要从包含值“低”,“中”或“高”的数据框列创建直方图。当我尝试执行通常的df.column.hist()时,出现以下错误。 ex3.Severity.value_counts() Out[85]:
我试图根据另一列的长度对一列进行子串,但结果集是 NaN .我究竟做错了什么? import pandas as pd df = pd.DataFrame([['abcdefghi','xyz'],
我是一名优秀的程序员,十分优秀!