pandas
pandas操作excel表格常用方法
导入数据
import pandas as pd
excel_path = '调查问卷(1).xlsx'
df = pd.read_excel(excel_path)
查询数据方式
1.行数,列数
#excel第一行 称为 表头,用来当作索引查找,不算表的正文
#excel中的第二行,第一列
d1 = df.iloc[0,0]
#excel中的第6行,第6列
d2 = df.iloc[4,5]
#excel中的第6列
d3 = df.iloc[:,5]
#excel中的第3列到第4列
d4 = df.iloc[:,2:4]
#excel中的第2行
d5 = df.iloc[0]
#excel中的第3行到第4行
d6 = df.iloc[1:3,:]
print(d6)
### 2.行数,列名
```python
#excel中的第二行,第"3、我的性别"列
d1 = df.loc[0,'3、我的性别']
#excel中的第"3、我的性别"列
d2 = df.loc[:,'3、我的性别']
#excel中的第2行到第6行,第"3、我的性别"列
d3 = df.loc[0:4,'3、我的性别']
#excel中的第2行到第6行,第"3、我的性别","6、我的受教育程度"列
d4 = df.loc[0:4,['3、我的性别','6、我的受教育程度']]
print(d4)
### 3.条件查询
```python
#第“6、我的受教育程度“列为1 的第“10、我有几个孩子”列
d1 = df.loc[df['6、我的受教育程度']==1,'10、我有几个孩子']
d2 = df.loc[df['2、我的所在地是']>=1,['6、我的受教育程度','10、我有几个孩子']]
#对应第8列大于等于1的 第'6、我的受教育程度','10、我有几个孩子'两列
d3 = df.loc[df.iloc[:,7]>=1,['6、我的受教育程度','10、我有几个孩子']]
print(d3)
常见计算
计算前,先用前面的方法查询到对应数据
频数&频率
value_counts() -> 频数
value_counts(normalize=True) -> 频率
# 例1
data = df.loc[0:203,'3、我的性别']
#频数
d1 = data.value_counts()
print(d1)
#频率
d1 = data.value_counts(normalize=True)
print(d1)
# 例2
data = df.loc[0:203,'10、我有几个孩子']
#频数
d2 = data.value_counts()
print(d2)
#频率
d2 = data.value_counts(normalize=True)
print(d2)
均值&标准差&方差
mean() -> 均值
std() -> 标准差
var() -> 方差
# 例1
#受教育程度为1对应的有几个孩子
data = df.loc[df['6、我的受教育程度']==1,'10、我有几个孩子']
# 均值
m = data.mean()
# 标准差
s = data.std()
# 方差
a = data.var()
print(m,s,a)
F检验&t检验
from scipy.stats import ttest_rel, f
d1 = pd.Series([44.2, 36.1, 46.5, 40.7, 61.6, 55.4, 59.9, 55.2, 65.5, 58.5])
d2 = pd.Series([44.1, 35.9, 45.6, 39.5, 60.1, 55.1, 59.9, 54.2, 65.6, 58.2])
# F检验
# 统计量F
F = d1.var()/d2.var()
# F检验的p值
F_p = 1 - 2 * abs(0.5 - f.cdf(F, len(d1)-1, len(d2)-1))
print(F,F_p)
# t检验
t = ttest_rel(d1, d2)
print(t)
# 统计量
print(t.statistic)
# p值
print(t.pvalue)
0.9850606529349507 0.9824793107664763
TtestResult(statistic=3.048475214454681, pvalue=0.013826970451693616, df=9)
3.048475214454681
0.013826970451693616