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]