pandas一个函数实现:计算表data各类的统计信息,如:最大最小值、均值等等
时间: 2024-03-24 12:38:57 浏览: 157
可以使用 `pandas` 库中的 `describe()` 函数计算表格的统计信息,例如:
```python
import pandas as pd
# 读取数据表
data = pd.read_csv('data.csv')
# 计算统计信息
statistics = data.describe()
# 显示统计信息
print(statistics)
```
其中,`describe()` 函数会返回一个包含各类统计信息的 `DataFrame` 对象,包括计数、均值、方差、最小值、25% 分位数、中位数、75% 分位数和最大值等。如果数据表中包含非数值类型的列,则默认只会计算数值类型的列。如果需要计算所有列的统计信息,可以使用 `include='all'` 参数,例如:
```python
statistics = data.describe(include='all')
```
相关问题
python呈现常用统计量,包括最大最小值,平均值等的pandas函数为
在 pandas 中,可以使用 `describe()` 方法来显示 DataFrame 或 Series 中的常用统计量,包括计数、均值、标准差、最小值、第一四分位数、中位数、第三四分位数和最大值。示例代码如下:
```python
import pandas as pd
# 创建一个 Series
data = pd.Series([1, 2, 3, 4, 5, 6])
# 使用 describe() 方法显示常用统计量
print(data.describe())
```
输出结果如下:
```
count 6.000000
mean 3.500000
std 1.870829
min 1.000000
25% 2.250000
50% 3.500000
75% 4.750000
max 6.000000
dtype: float64
```
其中,`count` 表示样本数量,`mean` 表示均值,`std` 表示标准差,`min` 表示最小值,`25%` 表示第一四分位数,`50%` 表示中位数,`75%` 表示第三四分位数,`max` 表示最大值。
使用学习过的理论知识(Numpy数值分析基础、Matplotlib数据可视化基础、Pandas统计分析基础),对data.csv用户用户用电量数据进行相关处理,其中数据中有编号为1-200的200位电力用户,DATA_DATE表示时间,如2015/1/1表示2015年1月1日,KWH为用电量。请完成以下工作: 1、将数据进行转置,转置后行为用户编号、列为日期、值为用户每日用电量。 2、对数据中的异常数据进行识别并处理。 3、统计每个用户用电数据的基本统计量,包括:最大值、最小值、均值、中位数、和、方差、偏度、峰度。 4、每个用户用电数据按日差分,并求取差分结果的基本统计量,统计量同3。 5、求取每个用户的5%分位数。 6、每个用户按周求和并差分(一周7天,年度分开),并求取差分结果的基本统计量,统计量同三。 7、统计每个用户的日用电量在其最大值0.9倍以上的次数。 8、求取每个用户日为最大值/最小值的索引月份,若最大值/最小值存在于多个月份中,则输出含有最大值/最小值最多的那个月份。如1号用户的最小值为0,则看哪个月的0最多。 9、求取每个用户七八月电量和与三四月电量和的比值,最大值的比值,最小值的比值,均值(日均电量)的比值。 10、合并上述特征。
好的,我会按照您提供的需求,逐一完成每个任务。首先,我们需要加载数据文件data.csv,可以使用Pandas库中的read_csv()函数。代码如下:
```python
import pandas as pd
import numpy as np
# 加载数据文件
data = pd.read_csv('data.csv', encoding='gbk')
```
接下来,我们可以进行数据的转置操作,可以使用Pandas库中的pivot()函数。代码如下:
```python
# 数据转置
data_pivot = data.pivot(index='USER_ID', columns='DATA_DATE', values='KWH')
```
第二步,我们需要处理异常数据。异常数据往往会对统计结果产生较大的影响,因此需要进行识别和处理。常见的异常数据处理方法有删除、替换和插值等。这里我们使用替换方法,将异常数据替换为该用户所有数据的平均值。代码如下:
```python
# 处理异常数据
for user in data_pivot.index:
# 计算每个用户的均值
mean_val = data_pivot.loc[user].mean()
# 将小于0的数据替换为均值
data_pivot.loc[user][data_pivot.loc[user] < 0] = mean_val
```
第三步,统计每个用户用电数据的基本统计量。可以使用Pandas库中的describe()函数。代码如下:
```python
# 统计每个用户用电数据的基本统计量
statistic = pd.DataFrame()
statistic['max'] = data_pivot.max()
statistic['min'] = data_pivot.min()
statistic['mean'] = data_pivot.mean()
statistic['median'] = data_pivot.median()
statistic['sum'] = data_pivot.sum()
statistic['var'] = data_pivot.var()
statistic['skew'] = data_pivot.skew()
statistic['kurtosis'] = data_pivot.kurtosis()
```
第四步,每个用户用电数据按日差分,并求取差分结果的基本统计量。可以使用Pandas库中的diff()函数。代码如下:
```python
# 每个用户用电数据按日差分
data_diff = data_pivot.diff(axis=1)
# 统计差分结果的基本统计量
statistic_diff = pd.DataFrame()
statistic_diff['max'] = data_diff.max()
statistic_diff['min'] = data_diff.min()
statistic_diff['mean'] = data_diff.mean()
statistic_diff['median'] = data_diff.median()
statistic_diff['sum'] = data_diff.sum()
statistic_diff['var'] = data_diff.var()
statistic_diff['skew'] = data_diff.skew()
statistic_diff['kurtosis'] = data_diff.kurtosis()
```
第五步,求取每个用户的5%分位数。可以使用Numpy库中的percentile()函数。代码如下:
```python
# 求取每个用户的5%分位数
quantile_5 = np.percentile(data_pivot, 5, axis=1)
```
第六步,每个用户按周求和并差分,然后求取差分结果的基本统计量。可以使用Pandas库中的resample()和diff()函数。代码如下:
```python
# 每个用户按周求和并差分
data_weekly = data_pivot.resample('W', axis=1).sum()
data_weekly_diff = data_weekly.diff(axis=1)
# 统计差分结果的基本统计量
statistic_weekly_diff = pd.DataFrame()
statistic_weekly_diff['max'] = data_weekly_diff.max()
statistic_weekly_diff['min'] = data_weekly_diff.min()
statistic_weekly_diff['mean'] = data_weekly_diff.mean()
statistic_weekly_diff['median'] = data_weekly_diff.median()
statistic_weekly_diff['sum'] = data_weekly_diff.sum()
statistic_weekly_diff['var'] = data_weekly_diff.var()
statistic_weekly_diff['skew'] = data_weekly_diff.skew()
statistic_weekly_diff['kurtosis'] = data_weekly_diff.kurtosis()
```
第七步,统计每个用户的日用电量在其最大值0.9倍以上的次数。可以使用Pandas库中的apply()函数,结合lambda表达式。代码如下:
```python
# 统计每个用户的日用电量在其最大值0.9倍以上的次数
count_above_09 = data_pivot.apply(lambda x: len(x[x > 0.9 * x.max()]), axis=1)
```
第八步,求取每个用户日为最大值/最小值的索引月份。可以使用Pandas库中的idxmax()和idxmin()函数。代码如下:
```python
# 求取每个用户日为最大值/最小值的索引月份
max_month = data_pivot.idxmax(axis=1).dt.month
min_month = data_pivot.idxmin(axis=1).dt.month
# 如果最大值/最小值存在于多个月份中,则输出含有最大值/最小值最多的那个月份
def most_common(lst):
return max(set(lst), key=lst.count)
max_month = max_month.groupby(max_month.index).apply(most_common)
min_month = min_month.groupby(min_month.index).apply(most_common)
```
第九步,求取每个用户七八月电量和与三四月电量和的比值。可以使用Pandas库中的groupby()和sum()函数。代码如下:
```python
# 求取每个用户七八月电量和与三四月电量和的比值
data_summer = data_pivot.loc[:, '2015-07-01':'2015-08-31'].sum(axis=1)
data_spring = data_pivot.loc[:, '2015-03-01':'2015-04-30'].sum(axis=1)
ratio_max = (data_summer / data_spring).max()
ratio_min = (data_summer / data_spring).min()
ratio_mean = (data_summer / data_spring).mean()
```
第十步,合并上述特征。可以使用Pandas库中的concat()函数。代码如下:
```python
# 合并特征
features = pd.concat([statistic, statistic_diff, pd.Series(quantile_5, index=data_pivot.index, name='quantile_5'),
statistic_weekly_diff, count_above_09, max_month, min_month,
pd.Series([ratio_max, ratio_min, ratio_mean], index=['ratio_max', 'ratio_min', 'ratio_mean'], name='ratio')],
axis=1)
```
至此,我们已经完成了对data.csv数据的处理。
阅读全文