前言:作为一个数学建模的小白,负责代码数据部分,在第一天临近崩溃的状态下,还好第二天比较顺利,完成了自己的任务。
下面对这两天所遇到的问题进行汇总,避免下一次遇到类似的问题还要到处到解决方案…
- 使用read_csv()打开文件时,出现,各种编码问题,弄了很久,才发现我打开的是xslx文件而非csv文件,浪费了很多时间。
csv和xslx的区别:CSV是文本文件,用记事本就能打开。XLS 是二进制的文件只有用 EXCEL 才能打开;CSV 文件格式只能保存活动工作表中的单元格所显示的文本和数值。数据列以逗号分隔,每一行数据都以回车符结束。如果单元格中包含逗号,则该单元格中的内容以双引号引起
读取df = pd.read_csv(‘foo.csv’)
读取df = pd.read_excel('foo.xlsx)
写入 df.to_csv(‘hehe.csv’, index=False)
写入 df.to_excel(‘hehe.xlsx’, sheet_name=‘sheet1’, index=‘False’)
read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, doublequote=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)
- header
header 若数据没有表头时,系统会自动将第一行作为表头,若不想让第一行作为表头,则需要添加header=None;
若文件有表头,首先不能将header设置为None,否则会报错,其次将header设置为0,header=0,系统将第一行作为表头,但是也可以不用设置,如果有表头的情况下,系统会自动识别,将第一行设置为表头。
index_col
index_col=false
强制不使用第一行为行索引
index_clo=None
在默认为None的时候,pandas会自动将第一列作为索引,并额外添加一列。
index_col=0
所以大多我们会使用index_col=0,直接将第一列作为索引,不额外添加列。(常用!!!)
2.使用pandas绘图
在集训过程中,发现使用pandas 画图比matplib.pyplot 画图方便的多,他是基于matplotlib的,对于pandas数据,直接使用pandas本身实现的绘图方法比matplotlib更加方便简单。
参考博客1
注意:对于pandas绘图y轴中最好是指明columns=[' ']
举个例子:
#病死率
data1=pd.read_excel('result_death.xlsx',index_col=0)
print(data1.head())
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)
data1.sort_values(by='death_ratio',inplace=True, ascending=False) #
data_death=data1.iloc[0:10:,-1]
print(data_death.head())
ax=data_death.plot(kind='bar',figsize=(10,8),title='病死率前十国家',fontsize=20,grid=True)
plt.show()
ax.axes.title.set_size(15) #调整标题的大小
fig = ax.get_figure()
fig.savefig('death_ratio.png')
3.使用pandas对列或者行进行求和问题
dataframe.sum(axis=0) 0表示在列方向上求和,1表示在行方向上求和,求和后得到的是Series
4.groupby操作