此处将为大家介绍关于Pandas:DataFrame.mean的详细内容,并且为您解答有关非常慢。如何更快地计算列均值?的相关问题,此外,我们还将为您介绍关于Pandas-使用一个Dataframe列
此处将为大家介绍关于Pandas:DataFrame.mean的详细内容,并且为您解答有关非常慢。如何更快地计算列均值?的相关问题,此外,我们还将为您介绍关于Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe、Pandas DataFrame 跨组计算平均值、Pandas DataFrame使用另一个DataFrame列过滤行、Pandas Dataframe查找所有列均相等的行的有用信息。
本文目录一览:- Pandas:DataFrame.mean()非常慢。如何更快地计算列均值?(pandas 列均值)
- Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe
- Pandas DataFrame 跨组计算平均值
- Pandas DataFrame使用另一个DataFrame列过滤行
- Pandas Dataframe查找所有列均相等的行
Pandas:DataFrame.mean()非常慢。如何更快地计算列均值?(pandas 列均值)
我有一个相当大的CSV文件,它包含9917530行(无标题)和54列。列是实数或整数,只有一个包含日期。该文件上有一些NULL值,在将其nan
加载到pandas后,这些值会转换为NULLDataFrame
:
import pandas as pddata = pd.read_csv(''data.csv'')
加载后,我认为这非常快,导致它花费了大约30秒的时间(与使用Unix工具计算行数几乎同时wc
),该过程大约需要4Gb的RAM(磁盘上文件的大小:2.2)
Gb。到目前为止一切顺利。
然后,我尝试执行以下操作:
column_means = data.mean()
该进程的占用内存非常快地增长到了约22Gb。我还可以看到处理器(一个内核)非常繁忙-
在大约三个小时后,我终止了该进程,因为我需要将计算机用于其他用途。我有一台运行Linux的非常快的PC-
它有2个处理器,每个处理器有4个内核,所以总共有8个内核,还有32 Gb RAM。我不敢相信计算列均值会花费这么长时间。
谁能解释为什么DataFrame.mean()
这么慢?更重要的是,这样计算文件的列均值的更好方法是什么?我是否没有以最佳方式加载文件,应该使用其他功能代替DataFrame.mean()
还是使用完全不同的工具?
提前谢谢了。
编辑。这是df.info()
显示的内容:
<class ''pandas.core.frame.DataFrame''>Int64Index: 9917530 entries, 0 to 9917529Data columns (total 54 columns):srch_id 9917530 non-null valuesdate_time 9917530 non-null valuessite_id 9917530 non-null valuesvisitor_location_country_id 9917530 non-null valuesvisitor_hist_starrating 505297 non-null valuesvisitor_hist_adr_usd 507612 non-null valuesprop_country_id 9917530 non-null valuesprop_id 9917530 non-null valuesprop_starrating 9917530 non-null valuesprop_review_score 9902900 non-null valuesprop_brand_bool 9917530 non-null valuesprop_location_score1 9917530 non-null valuesprop_location_score2 7739150 non-null valuesprop_log_historical_price 9917530 non-null valuesposition 9917530 non-null valuesprice_usd 9917530 non-null valuespromotion_flag 9917530 non-null valuessrch_destination_id 9917530 non-null valuessrch_length_of_stay 9917530 non-null valuessrch_booking_window 9917530 non-null valuessrch_adults_count 9917530 non-null valuessrch_children_count 9917530 non-null valuessrch_room_count 9917530 non-null valuessrch_saturday_night_bool 9917530 non-null valuessrch_query_affinity_score 635564 non-null valuesorig_destination_distance 6701069 non-null valuesrandom_bool 9917530 non-null valuescomp1_rate 235806 non-null valuescomp1_inv 254433 non-null valuescomp1_rate_percent_diff 184907 non-null valuescomp2_rate 4040633 non-null valuescomp2_inv 4251538 non-null valuescomp2_rate_percent_diff 1109847 non-null valuescomp3_rate 3059273 non-null valuescomp3_inv 3292221 non-null valuescomp3_rate_percent_diff 944007 non-null valuescomp4_rate 620099 non-null valuescomp4_inv 692471 non-null valuescomp4_rate_percent_diff 264213 non-null valuescomp5_rate 4444294 non-null valuescomp5_inv 4720833 non-null valuescomp5_rate_percent_diff 1681006 non-null valuescomp6_rate 482487 non-null valuescomp6_inv 524145 non-null valuescomp6_rate_percent_diff 193312 non-null valuescomp7_rate 631077 non-null valuescomp7_inv 713175 non-null valuescomp7_rate_percent_diff 277838 non-null valuescomp8_rate 3819043 non-null valuescomp8_inv 3960388 non-null valuescomp8_rate_percent_diff 1225707 non-null valuesclick_bool 9917530 non-null valuesgross_bookings_usd 276592 non-null valuesbooking_bool 9917530 non-null valuesdtypes: float64(34), int64(19), object(1)None
答案1
小编典典这与的大小相似,但没有对象列
In [10]: nrows = 10000000In [11]: df = pd.concat([DataFrame(randn(int(nrows),34),columns=[ ''f%s'' % i for i in range(34) ]),DataFrame(randint(0,10,size=int(nrows*19)).reshape(int(nrows),19),columns=[ ''i%s'' % i for i in range(19) ])],axis=1)In [12]: df.iloc[1000:10000,0:20] = np.nanIn [13]: df.info()<class ''pandas.core.frame.DataFrame''>Int64Index: 10000000 entries, 0 to 9999999Data columns (total 53 columns):f0 9991000 non-null valuesf1 9991000 non-null valuesf2 9991000 non-null valuesf3 9991000 non-null valuesf4 9991000 non-null valuesf5 9991000 non-null valuesf6 9991000 non-null valuesf7 9991000 non-null valuesf8 9991000 non-null valuesf9 9991000 non-null valuesf10 9991000 non-null valuesf11 9991000 non-null valuesf12 9991000 non-null valuesf13 9991000 non-null valuesf14 9991000 non-null valuesf15 9991000 non-null valuesf16 9991000 non-null valuesf17 9991000 non-null valuesf18 9991000 non-null valuesf19 9991000 non-null valuesf20 10000000 non-null valuesf21 10000000 non-null valuesf22 10000000 non-null valuesf23 10000000 non-null valuesf24 10000000 non-null valuesf25 10000000 non-null valuesf26 10000000 non-null valuesf27 10000000 non-null valuesf28 10000000 non-null valuesf29 10000000 non-null valuesf30 10000000 non-null valuesf31 10000000 non-null valuesf32 10000000 non-null valuesf33 10000000 non-null valuesi0 10000000 non-null valuesi1 10000000 non-null valuesi2 10000000 non-null valuesi3 10000000 non-null valuesi4 10000000 non-null valuesi5 10000000 non-null valuesi6 10000000 non-null valuesi7 10000000 non-null valuesi8 10000000 non-null valuesi9 10000000 non-null valuesi10 10000000 non-null valuesi11 10000000 non-null valuesi12 10000000 non-null valuesi13 10000000 non-null valuesi14 10000000 non-null valuesi15 10000000 non-null valuesi16 10000000 non-null valuesi17 10000000 non-null valuesi18 10000000 non-null valuesdtypes: float64(34), int64(19)
时间(与您相似的机器规格)
In [14]: %timeit df.mean()1 loops, best of 3: 21.5 s per loop
您可以通过预先转换为浮点数来获得2倍的加速(平均值是这样做的,但是这样做的方式更通用,所以更慢)
In [15]: %timeit df.astype(''float64'').mean()1 loops, best of 3: 9.45 s per loop
您的问题是对象列。Mean将尝试为所有列进行计算,但是由于对象列的存在,所有内容都被转换为object
dtype,这对于计算效率不高。
最好的选择是做
df._get_numeric_data().mean()
可以numeric_only
在较低级别上执行此操作,但是由于某些原因,我们不通过顶级功能(例如Mean)直接支持此操作。我认为添加此参数会产生问题。但是False
,默认情况下将为prob
(不排除)。
Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe
我能够使用下面的方法获得所需的输出
df1.merge(df2,left_on = df2.prod_ref.str.extract(''(\d+)'',expand = False),right_on = df1.prod_id.str.extract(''(\d+)'',how = ''left'')
Pandas DataFrame 跨组计算平均值
如何解决Pandas DataFrame 跨组计算平均值?
所以我有一个数据框,其中包含具有不同超参数的实验数据和一个名为 repeat_id
的特殊值,我们必须运行该值才能找到统计显着性。我基本上是在尝试计算不同 repeat_id
上任何其他记录值的平均值。这与计算组内均值的标准 GroupBy.mean 不同,这里我需要诸如 跨 组均值之类的东西。示例:
repeat_id variant measuerment_0 measuerment_1 ... measuerment_n
0 0 ''A'' 0.0 1.0 2.0
1 1 ''A'' 0.2 0.4 0.6
2 0 ''B'' 0.1 1.1 2.1
3 1 ''B'' 0.3 0.5 0.7
预期输出:
variant measuerment_0 measuerment_1 ... measuerment_n
0 ''A'' 0.1 0.7 1.3
1 ''B'' 0.2 0.8 1.4
解决方法
您也可以使用 pivot_table()
函数执行此操作。
df.pivot_table(index=''variant'',aggfunc=''mean'').drop(columns=''repeat_id'')
Pandas DataFrame使用另一个DataFrame列过滤行
我会做merge
out = df1.merge(df2[['col1','col2']],on = 'col1',suffixes = ('','1')).query('col3>=col21').drop('col21',1)
out
Out[15]:
col1 col2 col3 col4
1 A 2 0.80 200
2 A 2 0.90 300
3 A 3 0.95 400
4 A 3 0.85 500
5 B 2 0.65 600
6 B 2 0.75 700
9 B 3 0.75 1000
或reindex
out = df1[df1['col3'] >= df2.set_index('col1')['col2'].reindex(df1['col1']).values]
Out[19]:
col1 col2 col3 col4
1 A 2 0.80 200
2 A 2 0.90 300
3 A 3 0.95 400
4 A 3 0.85 500
5 B 2 0.65 600
6 B 2 0.75 700
9 B 3 0.75 1000
您还可以使用map
:
df1.loc[df1.col3 >= df1.col1.map(df2.set_index("col1").col2)]
,
我的方法类似于@Ben_Yo的合并答案,但是代码更多,但也许更直接。
您只需:
- 合并该列并创建新的数据框
ZStack{ Rectangle() .frame(width: geometry.size.width,height: geometry.size.height/3.25) .shadow(radius: 5) .foregroundColor(Color.white) //Words ontop of the Rectangle VStack { HStack { Spacer() Text("Hello World") }.padding(.trailing,40) Spacer() //<-- PROBLEM HERE }//.offset(y: -40) }
- 根据条件(在本例中为
s
),将数据名人 - 最后,将
s['col3'] >= s['col2']
传递给s
,结果将排除布尔系列df1
中返回False
的行:
s
更改为返回True
或False
的布尔系列。
s
Pandas Dataframe查找所有列均相等的行
我有一个包含字符的数据框-我想要按行的布尔结果,告诉我该行的所有列是否具有相同的值。
例如,我有
df = [ a b c d0 ''C'' ''C'' ''C'' ''C''1 ''C'' ''C'' ''A'' ''A''2 ''A'' ''A'' ''A'' ''A'' ]
我希望结果是
0 True1 False2 True
我已经尝试过.all,但似乎只能检查是否都等于一个字母。我能想到的唯一另一种方法是在每一行上做一个唯一的,看看是否等于1?提前致谢。
答案1
小编典典我认为最干净的方法是使用eq根据第一列检查所有列:
In [11]: dfOut[11]: a b c d0 C C C C1 C C A A2 A A A AIn [12]: df.iloc[:, 0]Out[12]: 0 C1 C2 AName: a, dtype: objectIn [13]: df.eq(df.iloc[:, 0], axis=0)Out[13]: a b c d0 True True True True1 True True False False2 True True True True
现在,您可以使用全部(如果它们都等于第一项,则它们都相等):
In [14]: df.eq(df.iloc[:, 0], axis=0).all(1)Out[14]: 0 True1 False2 Truedtype: bool
关于Pandas:DataFrame.mean和非常慢。如何更快地计算列均值?的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Pandas - 使用一个 Dataframe 列的子字符串比较两个 Dataframe、Pandas DataFrame 跨组计算平均值、Pandas DataFrame使用另一个DataFrame列过滤行、Pandas Dataframe查找所有列均相等的行的相关信息,请在本站寻找。
本文标签: