引用
最近有个需求,对数据进行处理,经过考虑,使用DataFrame来处理是比较轻松的,这里总结一下用法。
从excel中读取
读取c:/tmp/source.xlsx
,并且转换为DataFrame,并且第一列作为index,不参与计算
pd.read_excel('c:/tmp/source.xlsx', index_col=0)
添加列
source.insert(loc=列要添加到哪个位置?, column='列的名称', value=新列要填充的值)
添加cob列到首位,并且值为原来的第一列的值
source.insert(loc=0, column='cob', value=source[source.columns[0]])
删除列
source.drop(columns=['列名'])
删除temp
列
source.drop(columns=['temp'])
修改列名(每个列均修改)
source.columns = [ 对col进行处理 for col in source.columns]
跳过第一列,后面的每一列都变成cob+原列名
source.columns = [source.columns[0]] + ['cob' + str(col) for col in source.columns[1:]]
获取非nan的数据
source<div class="flex-column"></div>.dropna()
获取col
个列从后往前数,非空数据开始,最后6个值
source['col'].dropna().iloc[-6:]
计算平均数
source.mean()
获取col
列的平均值
source['col'].mean()
填充空值
source.fillna(值)
把col
列的控制用-1
填充
source['col'].fillna(-1)
遍历整个DataFrame
输出x,y和值
for x in range(0, len(source.index)): # 遍历每一行
for y in range(1, len(source.columns)): # 遍历每一列
print(x, y, source.iloc[x, y])
赋值
result.iloc[位置坐标X, 位置坐标Y] = 值
result['列名'][行] = 值
X,Y位置的DataFrame的值赋值为它本身 / 左侧对应的值 * 100, 并且保留两位小数。
ℹ:此处的np为numpy,避免精度损失导致数据错误。
source.iloc[x, y]= np.double(np.round((source.iloc[x, y] / source.iloc[x, y - 1]) * 100, 2)) # 计算百分比
source['col'][0] = -1 # 将col列中的第一行赋值为-1
导出为文件
导出Excel
source.to_excel('文件路径')
导出DataFrame到c:\a.xlsx
source.to_excel('c:\a.xlsx')
导出CSV
source.to_csv('文件路径')
导出DataFrame到c:\a.csv
, 忽略第一列(并不是数据的第一列,而是index(序号))
source.to_excel('c:\a.csv', index=None)
重置索引
source.reset_index(drop=True) # drop = True 意味着不要添加索引列,否则回多处一列为旧索引
按值排序
query.sort_values(by='confirmmonth') # 按照confirmmonth列排序
待续
持续更新
该部分仅登录用户可见
1 条评论
df1/df2 df1+df2 转置,累加----*。。。。。。。未完待续