【Python】pandas使用指南(持续更新...)

pandas读取excel指定列存为csv

import pandas as pd


excel_file = 'a.xlsx'
csv_file = 'a.csv'

# 读取Excel指定列,不读取前4行的备注及标题信息
df = pd.read_excel(excel_file, usecols=[0, 3], header=0)

# 自定义标题和索引
df.columns = ['Date(GMT)', 'Text']

# 打印前5行
print(df.head(5))

# 存为csv
df.to_csv(csv_file, sep="\t", index=False)

遍历pandas表格

for i, row_series in df.iterraows():

     print(i, row_series.values)

删除有空值的行

df=df[~(df['col'].isnull())] #删掉空行
 
df=dropna(axis=0)  #删除有空值的行,使用参数axis=0
 
df=dropna(axis=1)  #删除有空值的列,使用参数axis=1

pandas写入excel

tw = pd.DataFrame({"Date(GMT)":Date, Url":Url},
                        columns=['Date(GMT)', 'Url'']
                        )
xlsx_file = ("test.xlsx")
writer = pd.ExcelWriter(xlsx_file)
tw.to_excel(writer, index=False)
writer.save()

Pandas创建一个空DataFrame,并逐行插入数据

#创建一个空的Dataframe
result =pd.DataFrame(columns=('idx','degree','weight','diameter'))
#将计算结果逐行插入result,注意变量要用[]括起来,同时ignore_index=True,否则会报错,ValueError: If using all scalar values, you must pass an index
for i in idx:
    degree=3
    weight=1
    diameter=2
    result=result.append(pd.DataFrame({'idx':[i],'degree':[degree],'weight':[weight],'diameter':[diameter]}),ignore_index=True)
    # df = df.append(dframe1.loc[dframe1.user == user], ignore_index=True)  # 从别的表格中取一行往dataframe中插入

链接

pandas选取某行

data.loc['a',['w','x']]  #返回‘a'行'w'、'x'列,这种用于选取行索引列索引已知

注意是方括号!不是圆括号!

而且不要把pandas格式当成字典去调取! 

按列取、按索引/行取、按特定行列取:https://www.cnblogs.com/nxf-rabbit75/p/10105271.html

import pandas as pd
import numpy as np
df=pd.DataFrame(np.arange(12).reshape((3,4)),index=None)
df[[1]]              # 取1列
df[1]                # 取1列
df.iloc(1)         #  取1行
df.iloc(1:3)      # 取1,2行
df.iloc(1:3, 4,6)    # 取1,2行,4,5列


openpyxl 调整excel列宽、字体

# 调整列宽
from openpyxl import load_workbook
wb = load_workbook(xlsx_file)
print(wb.sheetnames)
ws = wb[wb.sheetnames[0]]
ws.row_dimensions[1].height = 20
ws.column_dimensions['A'].width = len(str(ws.cell(2, 2))) + 1
ws.column_dimensions['B'].width = 5
# 调整字体
font = Font(name='Calibri', size = 11, italic = False, vertAlign = None, underline = 'none', strike = False, color = 'FF000000')
for cell in np.array(ws["A1":"J"+str(len(twitters))]).flatten():
    cell.font = font
wb.save(xlsx_file)

更多字体设置Font:https://www.jianshu.com/p/819d97dbd0db

对齐方法Alignment:https://openpyxl.readthedocs.io/en/2.5/api/openpyxl.styles.alignment.html

pandas (loc、iloc、ix)的区别

loc:通过行标签索引数据:   pf.loc[1]

iloc:通过行号索引行数据:   pf.loc['a']

ix:通过行标签或行号索引数据(基于loc和iloc的混合):   pf.ix[1]

pandas数组获取最大值索引的方法-idxmax

 pandas Series 的 argmax 方法和 idxmax 方法用于获取 Series 的最大值的索引值。

import pandas as pd
s = pd.Series(data=[1, None, 4, 3, 4], index=['A', 'B', 'C', 'D', 'E'])
print(s.idxmax())
print(s.argmax())

argmax返回idmax的结果。打印结果都为“C”。但是,python3中idmax取代了argmax。

pandas求最大值、最小值

s.max()
s.min()
s.sum()
s.mean()
s.median()    # 中位数
s.quantile()   # 样本的分位数(0到1)

pandas归一化

(1)min-max标准化

s_norm = (s - s.min()) / (s.max() - s.min())

(2)Z-score标准化方法

s_norm = (s - s.mean()) / (s.std()) 

pandas中Series转为frame:pandas.Series.to_frame 

Series: 是一种类似于定长的有序字典,由下面两个部分组成:

              Values:一组数据值(ndarray)类型

              Index:相关的数据索引标签

DataFrame:是一个【表格型】的数据结构,可以看做是【由Series组成的字典】公用一个索引。DataFrame由按一定顺序排列的多列数据。设计初衷是将Series的使用场景从一维扩展到多维,DataFrame既有行索引,也有列索引

pandas获取列名,修改列名

df.columns    # 获取列名

df.rename(columns={'a':'A','b':'B'})    

pandas合并Series

https://blog.csdn.net/dyyzlzc/article/details/79307235

pd.index

最好不用pandas-DataFrame中的列直接给index赋值,最好用:pd.index = list(pd.column)

因为索引名和列名一样时,索引这一列时会报错。

pd.merge 和 pd.contact 

pd.merge中,用 how=‘outer’ 形式合并时,会保留冲突列并给列名加后缀。

pd.contact([A, B])中,则只是按顺序添加在后排。如果碰巧有相同索引的元素,则会在一个索引下检索出两行不同数据。

利用pandas+matplotlib进行绘图基础篇

https://blog.csdn.net/genome_denovo/article/details/78322628

pandas DataFrame 如何制定列的顺序(默认列名字典顺序)

pandas DataFram 如何制定列的顺序(默认列名字典顺序)

问题:默认的是按照列名的字典顺序排序的,要固定顺序,按照自己想要的顺序。

解决方案:

加columns字段即可

例子:

columns = ['cmt','class_label','test_label','predict_label']

df.to_csv("cnn_predict_result.csv",encoding="utf_8_sig",index=False,columns=columns)

链接:https://blog.csdn.net/glory1234work2115/article/details/53914239

在pandas中遍历DataFrame行

要以 Pandas 的方式迭代遍历DataFrame的行,可以使用:

for index, row in df.iterrows():

print row["c1"], row["c2"]
for row in df.itertuples(index=True, name='Pandas'):

print getattr(row, "c1"), getattr(row, "c2")

itertuples()应该比iterrows()

但请注意,根据文档(目前 Pandas 0.19.1):

  • iterrows:数据的dtype可能不是按行匹配的,因为iterrows返回一个系列的每一行,它不会保留行的dtypes(dtypes跨DataFrames列保留)*

  • iterrows:不要修改行

    你不应该修改你正在迭代的东西。这不能保证在所有情况下都能正常工作。根据数据类型的不同,迭代器返回一个副本而不是一个视图,写入它将不起作用。

链接:https://blog.csdn.net/ls13552912394/article/details/79349809

按索引合并DataFrame与Series

FerCategoryLabels = pd.merge(DF, DS, how="left", left_index=True, right_index=True)

按条件提取行和列

直接在索引框里操作: 

df2 = df1[[col0', 'col1', 'col2']][df1['col0'] > 10]

对行和列求和及添加新行和列

导入模块:

from pandas import DataFrame
import pandas as pd
import numpy as np

生成DataFrame数据

df = DataFrame(np.random.randn(4, 5), columns=['A', 'B', 'C', 'D', 'E'])

DataFrame数据预览:

          A         B         C         D         E
0  0.673092  0.230338 -0.171681  0.312303 -0.184813
1 -0.504482 -0.344286 -0.050845 -0.811277 -0.298181
2  0.542788  0.207708  0.651379 -0.656214  0.507595
3 -0.249410  0.131549 -2.198480 -0.437407  1.628228

计算各列数据总和并作为新列添加到末尾

df['Col_sum'] = df.apply(lambda x: x.sum(), axis=1)

计算各行数据总和并作为新行添加到末尾

df.loc['Row_sum'] = df.apply(lambda x: x.sum())
发布了392 篇原创文章 · 获赞 487 · 访问量 240万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览