数据降维
pandas 设置显示的行数 pandas.set_option('display.max_rows',None) #全部显示
多维数据降为一维
numpy.flatten()返回一份拷贝,对拷贝的修改不会影响原始矩阵
numpy.ravel()返回视图(view, 类似c中引用),会影响原始矩阵
meshgrid
[X,Y]=meshgrid(x,y)
1.作用是产生一个以向量x为行,向量y为列的矩阵, shape= [len(x), len(y)]
2.MATLAB中用于生成网格采样点的函数。在使用MATLAB进行3-D图形绘制方面有着广泛的应用。
二维数据展成一维
data4 = ['%.1f'%i for item in data1.values for i in item]
print(data4)
data3 = pd.Series(data4)
print(data3.value_counts())
DataFrame对象清空
df.drop(df.index,inplace=True)
dataframe数据筛选
result[abs(result['real'] - result['pred']) < 2.0]
删除列
df.drop(df.columns[x], axis=1, inplace=True) x=[1,2]
产生时间序列
pandas.date_range(start=None, end=None, periods=None, freq=’D’, tz=None, normalize=False, name=None, closed=None, **kwargs)
参数:
start:string或datetime-like,默认值是None,表示日期的起点。
end:string或datetime-like,默认值是None,表示日期的终点。
periods:integer或None,默认值是None,表示你要从这个函数产生多少个日期索引值;如果是None的话,那么start和end必须不能为None。
freq:string或DateOffset,默认值是’D’,表示以自然日为单位,这个参数用来指定计时单位,比如’5H’表示每隔5个小时计算一次。
tz:string或None,表示时区,例如:’Asia/Hong_Kong’。
normalize:bool,默认值为False,如果为True的话,那么在产生时间索引值之前会先把start和end都转化为当日的午夜0点。
name:str,默认值为None,给返回的时间索引指定一个名字。
closed:string或者None,默认值为None,表示start和end这个区间端点是否包含在区间内,可以有三个值,’left’表示左闭右开区间,’right’表示左开右闭区间,None表示两边都是闭区间。
转化成分类问题?以0.5为刻度
import os
import pandas as pd
import numpy as np
outFile = "E:/pythonFile/weeks/cls_all_point1.csv"
readFilePath= "E:/pythonFile/monday/all_point96_1.csv"
data1 = pd.read_csv(readFilePath, header=None)
dlen = len(data1[14])
print(dlen)
for i in range(0, dlen) :
# print(i)
data1[14][i] = int(data1[14][i] / 0.5)
data1.to_csv(outFile, index=False,header=None)
print("over")
创建dataframe拼接数据
data1 = pd.read_csv(readFilePath, header = 0, usecols=[2])#
data2 = data1[0:10]#.values.reshape(1,10) #但数据下标默认从0开始且无法修改
print(data2)
#data2.T.columns = range(1,11)
print(data2.T)
data = pd.DataFrame(columns=range(0,10))
data = data.append(data2.T,ignore_index=True)
#通过reshape,直接创建dataframe是可以的 或先生成空dataframe,再拼接
#data.append(pd.DataFrame(data2))
print(data)
data = pd.DataFrame({'real':real, 'pred':pred})
#要求real,pred为一维数组,若不是可以通过list->ndarray->ndarray.reshape()
常用方法
python寻找list中最大值、最小值并返回其所在位置
print c.index(min(c)) # 返回最小值
print c.index(max(c)) # 返回最大值
统计数组每个元素出现次数
def all_np(arr):
arr = np.array(arr)
key = np.unique(arr)
result = {}
for k in key:
mask = (arr == k)
arr_new = arr[mask]
v = arr_new.size
result[k] = v
return result
小数精度控制
round(data,factor) 如果只有一个数作为参数,不指定位数的时候,返回的是一个整数,而且是最靠近的整数(这点上类似四舍五入)。
但是当出现.5的时候,两边的距离都一样,round()取靠近的偶数,返回数值类型
使用格式化:"%.2f" % 2.635,返回字符串类型
math.ceil(),上取整
math.floor(), 下取整
统计程序运行时间
方法1
import datetime
starttime = datetime.datetime.now()
#long running
endtime = datetime.datetime.now()
print (endtime - starttime).seconds
方法2
start = time.time()
run_fun()
end = time.time()
print end-start
方法3
start = time.clock()
run_fun()
end = time.clock()
print end-start
方法1和方法2都包含了其他程序使用CPU的时间,是程序开始到程序结束的运行时间。
方法3算只计算了程序运行的CPU时间
numpy.ndarray 和 list转换
list 转 numpy , list长度len(list)返回类似数组的行数
np.array(a)
ndarray 转 list, ndarray形状ndarray.shape返回数组的行、列数
a.tolist()
常用ndarray属性:
* dtype 描述数组元素的类型
* shape 以tuple表示的数组形状
* ndim 数组的维度
* size 数组中元素的个数
* itemsize 数组中的元素在内存所占字节数
* T 数组的转置
* flat 返回一个数组的迭代器,对flat赋值将导致整个数组的元素被覆盖
* real/imag 给出复数数组的实部/虚部
* nbytes 数组占用的存储空间
axis=0,指定拼接在下方,axis=1,指定拼接在右侧
常用ndarray方法:
* reshape(…) 返回一个给定shape的数组的副本
* resize(…) 返回给定shape的数组,原数组shape发生改变
* flatten()/ravel()返回展平数组,原数组不改变
* astype(dtype) 返回指定元素类型的数组副本
* fill() 将数组元素全部设定为一个标量值
* sum/Prod() 计算所有数组元素的和/积
* mean()/var()/std() 返回数组元素的均值/方差/标准差
* max()/min()/ptp()/median()返回数组元素的最大值/最小值/取值范围/中位数
* argmax()/argmin() 返回最大值/最小值的索引
* sort() 对数组进行排序,axis指定排序的轴;kind指定排序算法,默认是快速排序
* view()/copy() view创造一个新的数组对象指向同一数据;copy是深复制
* tolist() 将数组完全转为列表,注意与直接使用list(array)的区别
* compress() 返回满足条件的元素构成的数组
求长度或size
ndarray,dataframe可以用shape返回高维size,用len返回第一维长度
dataframe.values为ndarray类型