Loading...

引用

最近有个需求,对数据进行处理,经过考虑,使用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列排序

待续

持续更新

该部分仅登录用户可见
如果觉得我的文章对你有用,请随意赞赏