风火编程--pandas, numpy的基本使用

pandas 使用记事

构造数据示例

import pandas as pd
df = pd.DataFrame(
    {k:[i for i in range(6)] for k in "abcdef"})
print(df)

读取csv文件

方法1

pd.read_csv(path, encoding="utf-8", , sep="\t", delimiter="\n")

方法2

with open(path, encoding="utf-8") as f:
    pd.read_csv(f, sep="\t", delimiter="\n",engine='python')

read_csv的参数

names=["col1", "col2"]  # 重新指定列名
columns=['col1', 'col2']

header=1  # 指定索引的行作为列名

index_col=False  # 不使用上搜索引作为列名

sep = ","  # 指定分隔符   "\s+", \t

delimiter="\n"  # 备选分隔符, 如果指定会sep失效

# 是否使用空白分隔符,等价于sep='\s+, 如果为True, delimiter失效.
delim_whitespacedelim_whitespace=False  
    
engine=‘c’  # 指定分析引擎, 如果"c"无法解析使用"python", 效率会降低

skipinitialspace=False  # 是否忽略分隔符后的空白

skiprows=0  # 跳过的行数, 从第0行开始算

error_bad_lines=False  # 是否删除列数过多的行, 需指定engine="c"

skip_blank_lines=Faaalse  # 是否跳过空行

keep_default_na=False  

# 替换空值, keep_default_na=False  时有效.
na_values=value

nrows=None  # 读取的行数, 从第0行起算.

parse_date=True  # 自动将时间格式的数据转换成时间类型.
day_first=True  # 时间格式,日在最前

取值

import pandas as pd
df = pd.DataFrame(
    {k:[i for i in range(6)] for k in "abcdef"}, index = ["i{}".format(i) for i in range(6)])
print(df)
# 取所有列名
cs = df.columns

# 取所有数据
vs = df.values

# 取索引
is_ = df.index

# 查看前5行和列名
h = df.head()

# 通过数字索引取行
l1 = df.iloc[1]  # 取一行
l2 = df.iloc[1:3]  # 取连续多行
l3 = df.iloc[[1,3,5]]  # 取不连续多行


# 通过数字索引取列, 列名用loc[]格式相同
c1 = df.iloc[:, 1] # 单列
c2 = df.iloc[:, 1: 3]  # 连续多列
c3 = df.iloc[:, [1, 3, 5]]  # 连续多列

# 通过索引取单个值
ic1 = df.iloc[1,1]
ic2 = df.loc['i1','b']

# 通过ix混合索引取值
# vv = df.ix[1, 'b']

先取列再取行
s = df.loc(‘column1’)
v = s.iloc(-1)

重置索引

# 使用默认索引,drop为是否删除原搜索引的列
df = df.reset_index(drop=False)

读取某一列

df['col1']

columns列名重命名

df = df.rename(columns={"col1": "new1"}, )  # 必须用关键字参数
df.columns = ['col1', 'col2', 'col3']  # 需要大于3个列

对一列apply(),返回多个列
列名排序
df = df[[column1, column2]]

def make_x(ind):
    # 计算返回值得逻辑
    pass
    return open, close
X = pd.DataFrame(columns=["open"])
    r = df['index'].apply(make_x)
    r.dropna(inplace=True)
    X["open"], X["close"], X["high"], X["low"] = zip(*r)
    print(X.head(3))

样本乱序

indexes =  np.random.permutation(len(X))
X_new = X[indexes]
y_new = y[indexes]

向量的模

norm = np.linalg.norm(w)

python字典转df

pd.DataFrame([{'a':0, },{'b':1}])
# 或者
pd.DataFrame([{'a':[0, 1], 'b':[2, 3]})

创建df并逐行添加数据

df = pd.DataFrame(columns=['code', 'num'])
df = df.append({'code':1, 'num': 2}, ignore_index=True)

存文件
# 存csv

    df.to_csv("path", sep=',', index=False, encoding='utf-8_sig')
  # 存excel
  filename = "out.xlsx"
  # writer = pd.ExcelWriter(filename, engine='xlsxwriter')
# df.to_excel(writer)
df.to_excel(filename, sheet_name='sheet1')

取某一列的最大值

max_value = df["column1"].max()
max_index = df["column1"].idxmax()

两列字符串相加

df["str_col1"].str.cat(df["str_col2"])
# 如果有数字先用astype("str")处理


删除某一列为空的行

df.dropna(subset=['colname'])

关联合并

pd.merge(df1, df2, on='col', how='left')

df转python

cases = [{k: v for k, v in zip(df.columns, row)} for row in df.values]



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值