import pandas as pd
# 这是一个从交易客户端导出的股票持仓csv文件
csv_path = r'C:\Users\tum\AppData\Local\Temp\tmp_ymy1tjo.csv'
df = pd.read_csv(
csv_path,
encoding="gbk",
delimiter="\t",
dtype={'证券代码':str, },
na_filter=False,
)
print('原始数据:', df)
# 定义一个字典,用于将csv中的列名,转换为约定的列名
col_dict = {
'证券代码':'stk_code',
'证券名称':'stk_name',
'当前持仓':'current_position',
'可用余额':'available_position',
'股东代码':'shareholder_id',
'交易市场':'market',
'参考成本价':'cost_price',
'参考市价':'last_price'
}
for k, v in col_dict.items():
# 输出顺序与col_dict的定义顺序确实一致,不存在内部重排序的问题
print(k, v)
#看一下要转换后的列名
print(col_dict.values())
# 以下完成删除不用的列
print (df.columns)
for col in df.columns:
if col not in col_dict:
df.pop(col)
print('删除无用列:', df)
# 以下完成列名转换
df.rename(columns = col_dict, inplace=True)
print('列名转换:', df)
# 以下完成列排序,至此得到的df已统一
df = df[col_dict.values()]
print('列名排序:', df)
知识点:
- 第一步读取的csv中列名是不固定的,与交易客户端界面上各列的排列顺序有关;
- 利用一个dict定义实现中文字符列名到统一格式列名的转换;
- 利用这个dict实现原始dataframe中多余列明的删除;
- 利用这个dict的values实现按统一英文列名顺序的排列,得到约定格式的dataframe;