• df = pd.DataFrame({'A': [1, 1, 1, 2, 2, 3, 3],'B':[1, 4, 3, 2, 1, 3, 3],'C':[1, 4, 3, 2, 1, 3, 3]}) df >>> A B C 0 1 1 1 1 1 4 4 2 1 3 3 3 2 2 2 4 2 1 1 5 3 3 3 6 3 3 3 df['D'] = df[['A...
df = pd.DataFrame({'A': [1, 1, 1, 2, 2, 3, 3],'B':[1, 4, 3, 2, 1, 3, 3],'C':[1, 4, 3, 2, 1, 3, 3]})
df
>>>
A	B	C
0	1	1	1
1	1	4	4
2	1	3	3
3	2	2	2
4	2	1	1
5	3	3	3
6	3	3	3

# 求A, B 两列平均值
df['D'] = df[['A', 'B']].mean(axis=1)
df
>>>
A	B	C	  D
0	1	1	1	1.0
1	1	4	4	2.5
2	1	3	3	2.0
3	2	2	2	2.0
4	2	1	1	1.5
5	3	3	3	3.0
6	3	3	3	3.0

# 同样用np.mean求
df.loc[:, 'E'] = np.mean([df['A'], df['B']], 0)  # 如果没有0,求的是A, B两列所有值和的平均数
df
>>>
A	B	C	  D	  E
0	1	1	1	1.0	1.0
1	1	4	4	2.5	2.5
2	1	3	3	2.0	2.0
3	2	2	2	2.0	2.0
4	2	1	1	1.5	1.5
5	3	3	3	3.0	3.0
6	3	3	3	3.0	3.0



展开全文
• 像这样的 DataFrame ，rdd_2 = sc.parallelize([(0,10,223,"201601"), (0,10,83,"2016032"),(1,20,None,"201602"),(1,20,3003,"201601"), (1,20,None,"201603"), (2,40, 2321,"201601"), (2,30, 10,"201602"),(2,61,...
像这样的 DataFrame ，rdd_2 = sc.parallelize([(0,10,223,"201601"), (0,10,83,"2016032"),(1,20,None,"201602"),(1,20,3003,"201601"), (1,20,None,"201603"), (2,40, 2321,"201601"), (2,30, 10,"201602"),(2,61, None,"201601")])df_data = sqlContext.createDataFrame(rdd_2, ["id", "type", "cost", "date"])df_data.show()+---+----+----+-------+| id|type|cost|   date|+---+----+----+-------+|  0|  10| 223| 201601||  0|  10|  83|2016032||  1|  20|null| 201602||  1|  20|3003| 201601||  1|  20|null| 201603||  2|  40|2321| 201601||  2|  30|  10| 201602||  2|  61|null| 201601|+---+----+----+-------+我需要用现有值的平均值填充空值，预期结果为+---+----+----+-------+| id|type|cost|   date|+---+----+----+-------+|  0|  10| 223| 201601||  0|  10|  83|2016032||  1|  20|1128| 201602||  1|  20|3003| 201601||  1|  20|1128| 201603||  2|  40|2321| 201601||  2|  30|  10| 201602||  2|  61|1128| 201601|+---+----+----+-------+其中1128是现有值的平均值。我需要在几个专栏中这样做。我目前的方法是使用na.fill：fill_values = {column: df_data.agg({column:"mean"}).flatMap(list).collect()[0] for column in df_data.columns if column not in ['date','id']}df_data = df_data.na.fill(fill_values)+---+----+----+-------+| id|type|cost|   date|+---+----+----+-------+|  0|  10| 223| 201601||  0|  10|  83|2016032||  1|  20|1128| 201602||  1|  20|3003| 201601||  1|  20|1128| 201603||  2|  40|2321| 201601||  2|  30|  10| 201602||  2|  61|1128| 201601|+---+----+----+-------+但这很麻烦。有什么想法吗？
展开全文
• python - pandas DataFrame：用平均...这个问题与这个问题非常相似：numpy数组：用平均值替换nan值，但不幸的是，给出的解决方案不适用于pandas DataFrame。piokuc asked 2019-07-29T20:10:32Z8个解决方案1...
python  -  pandas DataFrame：用平均列替换nan值我有一个大部分都有实数的pandas DataFrame，但它中也有一些nan值。如何用平均列替换nan？这个问题与这个问题非常相似：numpy数组：用列的平均值替换nan值，但不幸的是，给出的解决方案不适用于pandas DataFrame。piokuc asked 2019-07-29T20:10:32Z8个解决方案180 votes您只需使用fillna直接填写fillna：In [27]: dfOut[27]:A         B         C0 -0.166919  0.979728 -0.6329551 -0.297953 -0.912674 -1.3654632 -0.120211 -0.540679 -0.6804813       NaN -2.027325  1.5335824       NaN       NaN  0.4618215 -0.788073       NaN       NaN6 -0.916080 -0.612343       NaN7 -0.887858  1.033826       NaN8  1.948430  1.025011 -2.9822249  0.019698 -0.795876 -0.046431In [28]: df.mean()Out[28]:A   -0.151121B   -0.231291C   -0.530307dtype: float64In [29]: df.fillna(df.mean())Out[29]:A         B         C0 -0.166919  0.979728 -0.6329551 -0.297953 -0.912674 -1.3654632 -0.120211 -0.540679 -0.6804813 -0.151121 -2.027325  1.5335824 -0.151121 -0.231291  0.4618215 -0.788073 -0.231291 -0.5303076 -0.916080 -0.612343 -0.5303077 -0.887858  1.033826 -0.5303078  1.948430  1.025011 -2.9822249  0.019698 -0.795876 -0.046431fillna的文档字符串表示value应该是标量或字典，但是，它似乎也适用于Series。 如果你想传递一个字典，你可以使用df.mean().to_dict()。bmu answered 2019-07-29T20:10:52Z32 votes尝试：sub2['income'].fillna((sub2['income'].mean()), inplace=True)Ammar Shigri answered 2019-07-29T20:11:11Z19 votesIn [16]: df = DataFrame(np.random.randn(10,3))In [17]: df.iloc[3:5,0] = np.nanIn [18]: df.iloc[4:6,1] = np.nanIn [19]: df.iloc[5:8,2] = np.nanIn [20]: dfOut[20]:0         1         20  1.148272  0.227366 -2.3681361 -0.820823  1.071471 -0.7847132  0.157913  0.602857  0.6650343       NaN -0.985188 -0.3241364       NaN       NaN  0.2385125  0.769657       NaN       NaN6  0.141951  0.326064       NaN7 -1.694475 -0.523440       NaN8  0.352556 -0.551487 -1.6392989 -2.067324 -0.492617 -1.675794In [22]: df.mean()Out[22]:0   -0.2515341   -0.0406222   -0.841219dtype: float64每列应用该列的平均值并填充In [23]: df.apply(lambda x: x.fillna(x.mean()),axis=0)Out[23]:0         1         20  1.148272  0.227366 -2.3681361 -0.820823  1.071471 -0.7847132  0.157913  0.602857  0.6650343 -0.251534 -0.985188 -0.3241364 -0.251534 -0.040622  0.2385125  0.769657 -0.040622 -0.8412196  0.141951  0.326064 -0.8412197 -1.694475 -0.523440 -0.8412198  0.352556 -0.551487 -1.6392989 -2.067324 -0.492617 -1.675794Jeff answered 2019-07-29T20:11:35Z9 votes# To read data from csv fileDataset = pd.read_csv('Data.csv')# To divide input in X and y axisX = Dataset.iloc[:, :-1].valuesY = Dataset.iloc[:, 3].values# To calculate mean use imputer classfrom sklearn.preprocessing import Imputerimputer = Imputer(missing_values='NaN', strategy='mean', axis=0)imputer = imputer.fit(X[:, 1:3])X[:, 1:3] = imputer.transform(X[:, 1:3])Roshan jha answered 2019-07-29T20:11:53Z7 votes如果你想用平均值来计算缺失值，并且你想逐列，那么这只会用该列的平均值来估算。 这可能更具可读性。sub2['income'] = sub2['income'].fillna((sub2['income'].mean()))Pranay Aryal answered 2019-07-29T20:12:18Z6 votes除上述选择外，另一个选择是：df = df.groupby(df.columns, axis = 1).transform(lambda x: x.fillna(x.mean()))它比以前的均值响应更不优雅，但如果你想用其他列函数替换空值，它可能会更短。guibor answered 2019-07-29T20:12:50Z4 votes直接使用Outlet_size用均值填充所有空值如果要使用该列的平均值填充空值，则可以使用此值假设Outlet_size这里Item_Weight是列名这里我们分配（将x的空值填充为x的x的平均值）df['Item_Weight'] = df['Item_Weight'].fillna((df['Item_Weight'].mean()))如果要使用某些字符串填充空值，请使用这里Outlet_size是列名df.Outlet_Size = df.Outlet_Size.fillna('Missing')Sunny Barnwal answered 2019-07-29T20:13:49Z2 votes熊猫：如何将NaN（median）值替换为一列的平均值（中位数），中位数或其他统计数据假设您的DataFrame是median并且您有一个名为nr_item_ave的列。这是：NaN如果要将列median的median值替换为列的平均值，请执行以下操作：使用方法median：DF[ 'nr_item_ave'] = DF['nr_items].fillna（mean_value）我创建了一个名为nr_item_ave的新median列，用于存储新列，其中NaN值替换为列的mean值。使用median时应该小心。如果你有异常值，更值得推荐使用medianpink.slash answered 2019-07-29T20:14:56Z
展开全文
• pandas中Series和DataFrame基本操作。设有DataFrame结果的数据a如下所示：a bcone4 1 1two6 2 0three6 1 6一、查看数据(查看对象的方法对于Series来说同样适用)1.查看DataFrame前xx行或后xx行a=DataFrame(data);a....
pandas中Series和DataFrame基本操作。设有DataFrame结果的数据a如下所示：a bcone4 1 1two6 2 0three6 1 6一、查看数据(查看对象的方法对于Series来说同样适用)1.查看DataFrame前xx行或后xx行a=DataFrame(data);a.head(6)表示显示前6行数据，若head()中不带参数则会显示全部数据。a.tail(6)表示显示后6行数据，若tail()中不带参数则也会显示全部数据。2.查看DataFrame的index，columns以及valuesa.index ; a.columns ; a.values 即可3.describe()函数对于数据的快速统计汇总a.describe()对每一列数据进行统计，包括计数，均值，std，各个分位数等。4.对数据的转置a.T5.对轴进行排序a.sort_index(axis=1,ascending=False)；其中axis=1表示对所有的columns进行排序，下面的数也跟着发生移动。后面的ascending=False表示按降序排列，参数缺失时默认升序。6.对DataFrame中的值排序a.sort(columns=’x’)即对a中的x这一列，从小到大进行排序。注意仅仅是x这一列，而上面的按轴进行排序时会对所有的columns进行操作。二、选择对象1.选择特定列和行的数据a[‘x’] 那么将会返回columns为x的列，注意这种方式一次只能返回一个列。a.x与a[‘x’]意思一样。取行数据，通过切片[]来选择如：a[0:3] 则会返回前三行的数据。2.loc是通过标签来选择数据a.loc[‘one’]则会默认表示选取行为’one’的行；a.loc[:,[‘a’,’b’] ] 表示选取所有的行以及columns为a,b的列；a.loc[[‘one’,’two’],[‘a’,’b’]] 表示选取’one’和’two’这两行以及columns为a,b的列；a.loc[‘one’,’a’]与a.loc[[‘one’],[‘a’]]作用是一样的，不过前者只显示对应的值，而后者会显示对应的行和列标签。3.iloc则是直接通过位置来选择数据这与通过标签选择类似a.iloc[1:2,1:2] 则会显示第一行第一列的数据;(切片后面的值取不到)a.iloc[1:2] 即后面表示列的值没有时，默认选取行位置为1的数据;a.iloc[[0,2],[1,2]] 即可以自由选取行位置，和列位置对应的数据。4.使用条件来选择使用单独的列来选择数据a[a.c>0] 表示选择c列中大于0的数据使用where来选择数据a[a>0] 表直接选择a中所有大于0的数据使用isin()选出特定列中包含特定值的行a1=a.copy()a1[a1[‘one’].isin([‘2’,’3’])] 表显示满足条件：列one中的值包含’2’,’3’的所有行。三、设置值(赋值)赋值操作在上述选择操作的基础上直接赋值即可。例a.loc[:,[‘a’,’c’]]=9 即将a和c列的所有行中的值设置为9a.iloc[:,[1,3]]=9 也表示将a和c列的所有行中的值设置为9同时也依然可以用条件来直接赋值a[a>0]=-a 表示将a中所有大于0的数转化为负值四、缺失值处理在pandas中，使用np.nan来代替缺失值，这些值将默认不会包含在计算中。1.reindex()方法用来对指定轴上的索引进行改变/增加/删除操作，这将返回原始数据的一个拷贝。a.reindex(index=list(a.index)+[‘five’],columns=list(a.columns)+[‘d’])a.reindex(index=[‘one’,’five’],columns=list(a.columns)+[‘d’])即用index=[]表示对index进行操作，columns表对列进行操作。2.对缺失值进行填充a.fillna(value=x)表示用值为x的数来对缺失值进行填充3.去掉包含缺失值的行a.dropna(how=’any’)表示去掉所有包含缺失值的行五、合并1.concatconcat(a1,axis=0/1，keys=[‘xx’,’xx’,’xx’,…])，其中a1表示要进行进行连接的列表数据,axis=1时表横着对数据进行连接。axis=0或不指定时，表将数据竖着进行连接。a1中要连接的数据有几个则对应几个keys，设置keys是为了在数据连接以后区分每一个原始a1中的数据。例：a1=[b[‘a’],b[‘c’]]result=pd.concat(a1,axis=1，keys=[‘1’,’2’])2.Append 将一行或多行数据连接到一个DataFrame上a.append(a[2:],ignore_index=True)表示将a中的第三行以后的数据全部添加到a中，若不指定ignore_index参数，则会把添加的数据的index保留下来，若ignore_index=Ture则会对所有的行重新自动建立索引。3.merge类似于SQL中的join设a1,a2为两个dataframe,二者中存在相同的键值，两个对象连接的方式有下面几种：(1)内连接，pd.merge(a1, a2, on=’key’)(2)左连接，pd.merge(a1, a2, on=’key’, how=’left’)(3)右连接，pd.merge(a1, a2, on=’key’, how=’right’)(4)外连接， pd.merge(a1, a2, on=’key’, how=’outer’)至于四者的具体差别，具体学习参考sql中相应的语法。六、分组(groupby)用pd.date_range函数生成连续指定天数的的日期pd.date_range(‘20000101’,periods=10)def shuju():data={'date':pd.date_range('20000101',periods=10),'gender':np.random.randint(0,2,size=10),'height':np.random.randint(40,50,size=10),'weight':np.random.randint(150,180,size=10)}a=DataFrame(data)print(a)date gender height weight0 2000-01-01 0 47 1651 2000-01-02 0 46 1792 2000-01-03 1 48 1723 2000-01-04 0 45 1734 2000-01-05 1 47 1515 2000-01-06 0 45 1726 2000-01-07 0 48 1677 2000-01-08 0 45 1578 2000-01-09 1 42 1579 2000-01-10 1 42 164用a.groupby('gender').sum()得到的结果为： #注意在python中groupby(''xx)后要加sum()，不然显示不了数据对象。gender height weight0 256 9891 170 6431此外用a.groupby(‘gender’).size()可以对各个gender下的数目进行计数。所以可以看到groupby的作用相当于：按gender对gender进行分类，对应为数字的列会自动求和，而为字符串类型的列则不显示；当然也可以同时groupby([‘x1’,’x2’,…])多个字段，其作用与上面类似。七、Categorical按某一列重新编码分类如六中要对a中的gender进行重新编码分类，将对应的0，1转化为male，female，过程如下：a['gender1']=a['gender'].astype('category')a['gender1'].cat.categories=['male','female'] #即将0，1先转化为category类型再进行编码。print(a)得到的结果为：date gender height weight gender10 2000-01-01 1 40 163 female1 2000-01-02 0 44 177 male2 2000-01-03 1 40 167 female3 2000-01-04 0 41 161 male4 2000-01-05 0 48 177 male5 2000-01-06 1 46 179 female6 2000-01-07 1 42 154 female7 2000-01-08 1 43 170 female8 2000-01-09 0 46 158 male9 2000-01-10 1 44 168 female1所以可以看出重新编码后的编码会自动增加到dataframe最后作为一列。八、相关操作描述性统计：1.a.mean() 默认对每一列的数据求平均值；若加上参数a.mean(1)则对每一行求平均值；2.统计某一列x中各个值出现的次数：a[‘x’].value_counts()；3.对数据应用函数a.apply(lambda x:x.max()-x.min())表示返回所有列中最大值-最小值的差。4.字符串相关操作a[‘gender1’].str.lower() 将gender1中所有的英文大写转化为小写，注意dataframe没有str属性，只有series有，所以要选取a中的gender1字段。九、时间序列在六中用pd.date_range(‘xxxx’,periods=xx,freq=’D/M/Y….’)函数生成连续指定天数的的日期列表。例如pd.date_range(‘20000101’,periods=10),其中periods表示持续频数；pd.date_range(‘20000201’,’20000210’,freq=’D’)也可以不指定频数，只指定起始日期。此外如果不指定freq，则默认从起始日期开始，频率为day。其他频率表示如下：1.png十、画图(plot)在pycharm中首先要：import matplotlib.pyplot as plta=Series(np.random.randn(1000),index=pd.date_range('20100101',periods=1000))b=a.cumsum()b.plot()plt.show()#最后一定要加这个plt.show()，不然不会显示出图来。12.PNG也可以使用下面的代码来生成多条时间序列图：a=DataFrame(np.random.randn(1000，4),index=pd.date_range('20100101',periods=1000),columns=list('ABCD'))b=a.cumsum()b.plot()plt.show()13.png十一、导入和导出文件写入和读取excel文件虽然写入excel表时有两种写入xls和csv，但建议少使用csv，不然在表中调整数据格式时，保存时一直询问你是否保存新格式，很麻烦。而在读取数据时，如果指定了哪一张sheet，则在pycharm又会出现格式不对齐。还有将数据写入表格中时，excel会自动给你在表格最前面增加一个字段，对数据行进行编号。a.to_excel(r'C:\\Users\\guohuaiqi\\Desktop\\2.xls',sheet_name='Sheet1')a=pd.read_excel(r'C:\\Users\\guohuaiqi\\Desktop\\2.xls','Sheet1',na_values=['NA'])注意sheet_name后面的Sheet1中的首字母大写；读取数据时，可以指定读取哪一张表中的数据，而且对缺失值补上NA。最后再附上写入和读取csv格式的代码：a.to_csv(r'C:\\Users\\guohuaiqi\\Desktop\\1.csv'，sheet_name='Sheet1')a=pd.read_csv(r'C:\\Users\\guohuaiqi\\Desktop\\1.csv',na_values=['NA'])1
展开全文
• 这在R语言中使用rowMeans求取多行平均值，或colMeans求取多列平均值 示例如下： #create data frame data <- data.frame(var1 = c(0, NA, 2, 2, 5), var2 = c(5, 5, 7, 8, 9), var3 = c(2, 7, 9, 9, 7)
• 如何查看Pandas DataFrame对象的最大值、最小值、平均值、标准差、中位数等 我们举个例子说明一下，先创建一个dataframe对象df，内容如下: 1.使用sum函数获得函数的和,用法:df.sum() 2.使用max获取最大值,用法...
• 你可以简单地使用DataFrame.fillna来直接填充nan的：In [27]: df Out[27]: ABC 0 -0.166919 0.979728 -0.632955 1 -0.297953 -0.912674 -1.365463 2 -0.120211 -0.540679 -0.680481 3 NaN -2.027325 1.533582 4 ...
• I've got a pandas DataFrame filled mostly with real numbers, but there is a few nan values in it as well.How can I replace the nans with averages of columns where they are?This question is very simila...
• 最慢：Method_1，因为.describe( “A”)来计算最小值，最大值，平均值，STDDEV和计数(5个计算在整个)介质：方法4，因为，.rdd(DF到RDD转换)减慢了过程。因为逻辑非常相似，所以Spark的催化剂优化器遵循非常相似的...
• Python中如何求DataFrame中某一数的日平均值？ 例如求df对象中close的5日均线： 1.使用循环，采用手动计算的方式： df['close'][i-4:i+1].mean() 获取第i天的5日均线 2.对整个dataframe对象，使用rolling...
• 为了让不同频率数据统一时间标准，需要将数据按小时、分钟等方式进行分组，然后取组的平均值或中位数最为组的值，如果自己写算法会比较麻烦且耗时，pandas提供了一个函数可以快速解决此类问题：DataFrame.resample()...
• 条件是如果该值高于平均值,则将数值更改为1,否则将其设置为0.这是我现在的代码：import numpy as npimport matplotlib.pyplot as pltimport pandas as pddataset = pd.read_csv('data.csv')dataset = dataset....
• 在我需要编写一个函数，该函数遍历数据帧的每一行，将该值与每个类别的平均犯罪数进行比较，然后只标识犯罪数超过平均值的地址。在以下是我目前为止的代码：import pandas as pdimport csvcrimeData...
• SELECT (US + UK + CAN) / 3 AS mean FROM df可以直接与sqlcontext.sql一起使用，也可以使用dsl表示df.select(((col("UK") + col("US") + col("CAN")) / lit(3)).alias("mean"))如果有更多的，可以按如下方式生成...
• 小编做为一个多年资深搞仓库卫生，管理库存计划的打工人，由于工作需要，也接触了几种不同的计算平均值的方法，虽然现在系统是越来越强大了，很多数据，系统都能够直接计算出来的。但是，知其然才能知其所以然，了解...
• 条件是如果该值高于平均值,则将数值更改为1,否则将其设置为0.这是我现在的代码：import numpy as npimport matplotlib.pyplot as pltimport pandas as pddataset = pd.read_csv('data.csv')dataset = dataset....
• 计算year平均值、age的最大值 以字典数据"state": [‘a’, ‘b’, ‘c’, ‘d’], “year”: [1991, 1992, 1993, 1994], “pop”: [6, 7, 8, 9], “age”: [45, 23, 46, 78]},为基础创建一个DataFrame对象， ...
• 情景：计算两次考试，所有学生的平均成绩： '''a.csv date,name,grade 2020-07-01,mary,70 2020-07-01,tom,80 2020-07-01,jerry,70 2020-07-02,mary,80 2020-07-02,tom,90 2020-07-02,tom,100''' grade = pd....
• 有没有一种简单的方法来计算pandas DataFrame中每一平均值,并且为每一行排除特定值？下面每一行中的x标记了每次迭代中要从计算中排除的值：a b a b a b0 1 2 0 x x 0 1 21 ...
• 重复的处理利用drop_duplicates()函数删除数据表中重复多余的记录, 比如删除重复多余的ID.import pandas as pddf = pd.DataFrame({"ID": ["A1000","A1001","A1002", "A1002"],"departmentId": [60001,600...
• 作者：彭佳 转自： Excel之家ExcelHome小伙伴们好啊，今天和大家分享一组用于平均值计算的函数，分别是：算术平均值、修剪平均值、条件平均值和多条件平均值计算。1. AVERAGE功能：计算各参数的平均值常用写法为：=...
• 根据class_type对数据进行group，分别求x, y, z的平均值 df = pd.DataFrame(data) #给df加上列名 df.columns = ['x','y','z','seg'] #要被group的列名 cols = ['x','y','z'] #根据哪个进行group gp_col = 'seg'
• 首先通过a和b定义的范围创建范围DataFrame：a = np.arange(0, 180, 30)df1 = pd.DataFrame({'aa':a[:-1], 'bb':a[1:]})#print (df1)然后通过helpertmp交叉连接所有行：^{pr2}\$最后一个过滤器-有两个按的解决...
• 上节介绍获取行、列子集的方法，运用了range函数和python的切片语法，在数据分析中，总是会进行统计计算，很多基本统计计算有现成的库可用，或内置在语言中。...3.每个洲出了多少个国家和地区？对于...
• 9. 表格中缺失处理import numpy as npimport pandas as pddates = pd.date_range('20130101', periods=6)df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))s1 = pd.Series([1,2,3,4,5,...
• 输出：一个一维的平均值array import numpy as np def non_zero_mean(np_arr): exist = (np_arr != 0) num = np_arr.sum(axis=1) den = exist.sum(axis=1) return num/den 如果要求按行的非零元素的平均值，把...
• 如下所示： .count() #非空元素计算 .min() a #最小值 .max() #最大 .idxmin() #最小值的位置，类似于R中的which.min函数 .idxmax() #最大的....mad() #平均绝对偏差 .skew() #偏度 .kurt() #峰度 .describe() #

...