【Python】一些小tips

# 安装python包
# https://www.lfd.uci.edu/~gohlke/pythonlibs/
# python在windows上的第三方包,找到对应版本下载下来,用ftp传进172,再用 python -m pip install xxx.whl 来安装。

__author__ = 'Administrator'

import numpy as np
from collections import Counter
import pandas as pd
from pandas import DataFrame, Series

lst = [1, np.nan, 3, 4, np.nan, 5]
lstnan = np.isnan(lst)
lstcounts = Counter(lstnan)

print lstcounts

# df.loc[]是根据df的索引值来定位的,df.iloc[]是根据位置的从0~N的编号来定位的。
# bnd类型是Series
# input:(3,4), output:(1,2,3,1,2,3,4)
def getSeriesByBound(bnd):
    serial = []
    arr = bnd.values
    for x in arr:
        serial.extend(range(1,x+1))
    return Series(serial)

def handleDataFrame(df, fieldName, serialName, ratio):
    stkArr = df[fieldName].unique()
    resultDF = pd.DataFrame(columns=df.columns)
    for x in stkArr:
        dfTmp = df[df[fieldName]==x]
        ixSize = dfTmp.index.size
        # because the method: append() returns a new object, so I should
        # assign a new object to accept it.
        resultDF = resultDF.append(dfTmp[dfTmp[serialName] >= (1-ratio)*ixSize])
    return resultDF

# calculate mean and std by security_id
df_stat=df.groupby('security_id').describe()
df_stat.index.names=['sid','var']
df_stat=df_stat.query('var=="mean" or var=="std"')


df1=df[['stock_code','security_id','stock_cost','profit_ability']]
df_stat=df1.groupby('security_id').describe()
df_stat.index.names=['sid','var']
df_stat=df_stat.query('var=="mean" or var=="std"')
# 按照多列来排序
df1.sort_index(by=['security_id', 'profit_ability'], inplace=True)

# 读取前5行,并将第0列,即:period_id设置为索引index,且进行了日期格式化。
# df = pd.read_csv(file_path, nrows=20, parse_dates=[0], index_col=[0])
# df = pd.read_csv(file_path, nrows=20) 这里period_id是固定的,所以不能作为index。index要是唯一的嘛!
# df_realtime=pd.read_csv(r'D:\pyworkspace\airisk\dr.csv', dtype={'client_id':np.str}) 设置读取字段的类型
# 读取excel文件:
df = pd.read_excel(str_filename, header=0, dtype={'client_id':np.str}, sheetname='Sheet1')

# counts = Counter(np.isnan(df['stock_cost'])) 可以查看有多少nan值。

# 根据stock_cost这一列来进行dropna,如果这一列中有的行是NaN,则drop这一行
# df.shape查看DataFrame的大小
# df.dropna(subset=['stock_cost'], inplace=True)


# 查看stock_cost这一列还有没有缺失值,答案是没有
# df['stock_cost'].isnull().value_counts()
# 对Series按值进行排序,用order()方法。df['stock_cost'].order()

# 计算盈利能力指标
# df['profit_ability']=100*df['stock_profit']/df['stock_cost']
# df = dfa[['stock_code','profit_ability']] 选取dfa中的stock_code和profit_ability两行作为df

# 对于MultiIndex,使用test.query('ilevel_0=="7"') 这样的形式来查询数据,如果index有名字,就用index的名字,不能用ilevel_0这样的形式。
# test= test=df1.groupby('stock_code').describe()
# df_stat=test.query('ilevel_1=="mean" or ilevel_1=="std"')


# 根据stock_code排序就相当于是根据stock_code做groupby了。
# df_sorted=df.sort_index(by=['stock_code','profit_ability'])
# 上面这个方式是生成一个新的DataFrame,可以增加inplace=True选项。
# df1_sorted=df1.sort_index(by=['stock_code','profit_ability'],inplace=True)


# 查看分组之后的各组大小,
# df1.groupby('stock_code').size()

# 根据列名来删除列,加上axis=1
# df1.drop('serial', axis=1, inplace=True)
# 永久删除 del df1['serial']
# 删除多列
# df1.drop(['cola','colb'], axis=1, inplace=True)
# 删除行
tt.drop([0], inplace=True) # 删除索引=0的行。


# 给df1加上一列serial,注意:如果s为Series,则必须是 df1['serial1']=s.values,左边是Series,右边是list。
# df1.loc[:,'serial']=s.values
# df1['serial1']=s.values
# baseDF['flag']=pd.Series(ones(baseDF.shape[0])) 添加全1的列


# DataFrame和Series都有属性size,而不是方法.
# 创建一个只有列名的DataFrame: dfr = DataFrame(columns=['stock_code','security_id','stock_cost','profit_ability'])
# dfr=pd.DataFrame(columns=df1.columns)

# fetchone()返回的是tuple,取收盘价要closePrice[0];而fetchall()返回的是list,取收盘价是closePrice[0][0]

for i in range(df_stat.shape[0]):
     if i % 2 == 0:
          dft = df1[df1['stock_code'] == df_stat['stock_code'][i]]
          dfr = dfr.append(dft[dft['stock_cost'] > df_stat['stock_cost'][i]])

# 2016-6-24 标准化数据
# 1. 自己写代码实现,这里的baseDF是DataFrame格式
def standardizeData(baseDF):
    meanVal = baseDF.mean(axis=0)
    stdVal=baseDF.std(axis=0)
    baseDF = (baseDF - meanVal)/stdVal
    return baseDF
# 2. 利用sklear包
from sklearn import preprocessing
baseDF = pd.DataFrame()
scaled = pd.DataFrame(preprocessing.scale(baseDF))
# 3. 利用 StandardScaler 类
scaler = preprocessing.StandardScaler.fit(baseDF)
result = pd.DataFrame(scaler.transform(baseDF))

''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值