目录
1 Dataframe
1.1 取出Dataframe中的数据
取出第一列数据
import pandas as pd
df_data = pd.read_csv('my_dataset\wx_data\PeMSD8\PeMSD8.csv', nrows=2934)
print(df_data[0:1])
取出某一行数据
print(df_data.valid)
或者
print(df_data['valid'])
1.2 遍历DataFrame
itertuples 按行遍历
import pandas as pd
df_data = pd.read_csv('my_dataset\wx_data\PeMSD8\PeMSD8.csv', nrows=2934)
for i in df_data.itertuples():
print(i)
print(i[1])
iterrows 按行遍历
import pandas as pd
df_data = pd.read_csv('my_dataset\wx_data\PeMSD8\PeMSD8.csv', nrows=2934)
for i,row in df_data.iterrows():
print(i)
print(row[2])
iteritems 按列遍历
import pandas as pd
df_data = pd.read_csv('my_dataset\wx_data\PeMSD8\PeMSD8.csv', nrows=2934)
for column_name, Series_values in df_data.iteritems():
print(column_name)
print(Series_values)
valid 0 2016/7/1 0:05 1 2016/7/1 0:24 2 2016/7/1 0:44 3 2016/7/1 0:49 4 2016/7/1 1:05 5 2016/7/1 1:24 6 2016/7/1 1:44 7 2016/7/1 1:47 8 2016/7/1 2:05 9 2016/7/1 2:24 10 2016/7/1 2:44 11 2016/7/1 2:50 12 2016/7/1 3:04 13 2016/7/1 3:24
1.3 dataframe添加行的办法:
1.3.1 loc
df_empty = [tmstp, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
data_seq.loc[i] = df_empty
1.3.2 concat
data_seq = pd.concat([data_seq, raw_data], ignore_index=True)
1.3.3 append
import pandas as pd
import numpy as np
data = pd.read_csv('my_dataset\wx_data\PeMSD8\PeMSD8.csv', nrows=2934)
print(data)
a_df = pd.DataFrame(
[['2016/7/1 0:00', np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, '10000', np.nan, np.nan]],
columns=['valid', 'tmpf', 'dwpf', 'relh', 'drct', 'sknt', 'alti', 'vsby', 'skyc1', 'skyl1', 'feel'])
data = data.append(a,ignore_index = True)
print(data)
输出结果在data的最后一行加入了a_df的数据,并且最后一行的索引为2934,如果ignore_index = False,最后一行的索引为0
1.4 DataFrame读取和修改
1.4.1 修改对应位置的值
a、知道index 和列名的时候
df_data.loc[0,'valid'] = '2016/7/1 0:00'
df_data.loc[0,'tmpf'] = 1
b、不知道index 根据条件修改的时候
df_data.loc[(df_data['valid']=='2016/7/1 0:00'),'tmpf'] = 0
1.4.2 查询对应位置的值
a、查对应行
df[0:] #第0行及之后的行,df的全部数据
df[:2] #第3行之前的数据不包含第三行 左开右闭
df[0:1] #第0行
df[1:3] #第2行到第3行(不含第4行)
df[-1:] #最后一行
df[-3:-1] #倒数第3行和倒数第2行,因为没有-0,所以没有最后一行
b、使用索引值取对应位置的元素值
print(df_data.loc[0,'valid'])
print(df_data.loc[0,['valid','tmpf']])
1.4.3 iloc
iloc按照行与列的索引提取元素
a、打印
print(df_data.iloc[0, 0]) # 第1行第1列的数据
print(df_data.iloc[1, 2]) # 第2行第3列的数据
print(df_data.iloc[[1, 3], 0:2]) # 第2行和第4行,从第1列到第2列(左闭右开不包含第3列)的数据
print(df_data.iloc[1:3, [1, 2]]) # 第2行到第3行(不包含第1,4行),第2列和第3列的数据
b、修改
df_data.iloc[0,1:4] = [88.88,88.88,88.88] #修改一无素
df_data.iloc[:3,5] = [11,22,33] #修改一整列
1.4.4 at
访问个别元素
print(df_data.at[5,'valid'])
1.4.5 iat
print(df_data.iat[0,0])
1.4.6 直接打印
print(df_data[df_data.tmpf < 60].valid)
1.5 删除行列
1.5.1删除列
all_data.drop(['Datetime'], axis=1, inplace=True)
1.6 创建空的DataFrame
data_seq = pd.DataFrame(
columns=['valid', 'tmpf', 'dwpf', 'relh', 'drct', 'sknt', 'alti', 'vsby', 'skyc1', 'skyl1', 'feel'])
1.7 判断dataframe是否为空
if data.empty:
print('该dataframe为空')
1.8 查看dataframe开头和结尾数据
print(data_seq.head(100))
print(data_seq.tail(100))
1.9 对一个DataFrame的每一列都统计分析8个属性
print(one_data.describe())
1.10读取CSV文件为DataFrame
cur_df = pd.read_csv(data_path, names=col_names)
1.11读取出Dataframe中的数据
1.11.1 取出第一行数据
import pandas as pd
df_data=pd.read_csv('path', nrows=n)
print(df_data[0:1])
1.11.2 取出某一列数据
print(df_data.valid)
#或者
print(df_data['valid'])
1.12 遍历DataFrame
1.12.1 itertuples 按行遍历
for i in df_data.itertuples():
print(i)
1.12.2 iterrows 按行遍历
for i,row in df_data.iterrows():
print(i)
1.12.3 iteritems 按列遍历
for column_name, Series_values in df_data.iteritems():
print(column_name)
2 Series 常用属性和方法
将DataFrame一列转化为Series
import pandas as pd
df_data = pd.read_csv('my_dataset\wx_data\PeMSD8\PeMSD8.csv', nrows=2934)
one_data = pd.Series(df_data.skyc1)
print("数据的值: ",one_data.values)
输出:数据的值: ['CLR' 'CLR' 'CLR' ... 'FEW' 'FEW' 'FEW']
获取值
获取索引
print("索引的值原始值: ", one_data.index)
输出:索引的值原始值: RangeIndex(start=0, stop=2934, step=1)
转化为list
print("索引的值转换后: ", list(one_data.index))
获取每对值:
# 获取每对索引的值, 使用 items 方法
print("每对索引和值原始值: ", one_data.items)
输出: 1 CLR 2 CLR 3 FEW 4 CLR 5 CLR 6 CLR 7 FEW 8 CLR 9 CLR 10 CLR 11 CLR 12 CLR
遍历
for value in data.values:
print(value)
3 设置pandas打印不省略
设置不省略列(将列全部打印)
pd.set_option('display.width', None)
设置不省略行(将行全部打印)
pd.set_option('display.max_rows', None)
4 pandas缺失值填充
对数值进行插值填充
data_seq = data_seq.interpolate(method='linear', limit_direction='forward')
limit_direction:向前插值或者向后插值
method
linear:线性插值
nearest:阶梯插值,相当于0阶B样条曲线
zero:复制邻近值
slinear:滑动线性插值
quadratic:平方插值
cubic:立方插值
barycentric:重心
pad:对现有值进行插值,适合字符数据
( 'time'(时间), 'index'(索引), 'values'(序列值), 'pad'(前向填充), 'nearest'(最邻近), 'zero'(零值), 'slinear'(滑动线性), 'quadratic'(2次插值), 'cubic'(3次插值), 'spline'(样条函数), 'barycentric'(重心), 'polynomial'(分段多项式), 'from_derivatives'(衍生), 'krogh'(克罗格), 'piecewise_polynomial'(分段多项式),'pchip'(分段三次Hermite多项式插值), 'akima'(akima光滑插值), 'cubicspline'(3次样条))
5 python pandas 之drop()函数
import pandas as pd
import numpy as np
data=pd.DataFrame(np.arange(20).reshape((5,4)),columns=list('ABCD'),index=['a','b','c','d','e'])
print(data)
print('*'*40)
print(data.drop(['a'])) #删除a 行,默认inplace=False,
print('*'*40)
print(data)# data 没有变化
print('*'*40)
print(data.drop(['A'],axis=1))#删除列
print('*'*40)
print(data.drop(['A'],axis=1,inplace=True)) #在本来的data 上删除
print('*'*40)
print(data)data 发生变化
6 读取文件夹所有文件(夹)的名字
file_name_arr = os.listdir('./data')
7 设置pandas打印不省略
7.1 设置不省略列(将列全部打印)
pd.set_option('display.width', None)
7.2 设置不省略行(将行全部打印)
pd.set_option('display.max_rows', None)
8 保存npy格式的数据
import numpy as np
data_1 = np.zeros((3, 3))
# 将 ndarray 类型的数据以字典的形式保存在扩展名为 npz 的数据文件中
np.save("test.npy", data_1)
9 pandas.describe()
count:数量统计,此列共有多少有效值 unipue:不同的值有多少个 std:标准差 min:最小值 25%:四分之一分位数 50%:二分之一分位数 75%:四分之三分位数 max:最大值 mean:均值
离散值特有的:
unique:不重复的离散值数目,去重之后的个数 top: 出现次数最多的离散值 freq: 上述的top出现的次数
import pandas as pd
df_data = pd.read_csv('my_dataset\wx_data\PeMSD8\PeMSD8.csv', nrows=2934)
z = df_data.describe()
取出某一个参数
import pandas as pd
df_data = pd.read_csv('my_dataset\wx_data\PeMSD8\PeMSD8.csv', nrows=2934)
z = df_data.describe().loc['mean']
10 保留两位小数
a = 1.233
print(a.round(2)))