上手Pandas,带你玩转数据(3)-- pandas数据存入文件

看,未来 2021-04-07 14:23:23
pandas 玩转 带你 上手 转数


在这里插入图片描述

接上一篇

略微有点尴尬,本来存取是应该一起写的,但是没想到一个取居然写了那么多,我都写累了,你们看的不得累嘛,还是分开写,减缓我的疲劳,也减缓你们的视觉疲劳。

上手Pandas,带你玩转数据(2)-- 使用pandas从多种文件中读取数据


将外部数据转化为DataFrame

不管你要写什么,不管你的目的地是什么,首先先将你的数据转化为DataFrame格式的,这点毋庸置疑。
我之前有讲过这个,不过再讲一遍也无妨,因为我自己也记不住。

从列表中创建一个DataFrame:

data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
Name Age
0 Alex 10
1 Bob 12
2 Clarke 13

从ndarrays / Lists的Dict创建一个DataFrame:

data = {
'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
Age Name
0 28 Tom
1 34 Jack
2 29 Steve
3 42 Ricky
df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
Age Name
rank1 28 Tom
rank2 34 Jack
rank3 29 Steve
rank4 42 Ricky

从字典列表中创建一个DataFrame:

data = [{
'a': 1, 'b': 2},{
'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
a b c
0 1 2 NaN
1 5 10 20.0
df = pd.DataFrame(data, index=['first', 'second'])
a b c
first 1 2 NaN
second 5 10 20.0

如果不想带上不必要的麻烦,建议把列名带上,然后写入的时候选取不写入索引列


DataFrame写入文件

csv

to_csv()是DataFrame类的方法,常用参数释义如下:

path_or_buf:文件保存位置
sep:分隔符,如果不写,默认是‘,’
columns:指定保存的列
header:是否保存列名称
index:是否保存索引列
index_label:指定索引列名称

代码示例:

import pandas as pd
df = pd.DataFrame([['武汉晴川学院', '市场营销', '物理或历史均可', '不提再选科目要求'],['杭州师范大学钱江学院', '市场营销', '物理或历史均可', '不提再选科目要求'],['云南师范大学商学院', '国际经济与贸易', '物理或历史均可', '不提再选科目要求'],['南昌工学院', '产品设计', '物理或历史均可', '不提再选科目要求'],['长春财经学院', '金融学', '物理或历史均可', '不提再选科目要求'],['广西大学行健文理学院', '金融学', '物理或历史均可', '不提再选科目要求']],
columns=["学校","专业","主科要求","副科要求"])
df.to_csv('test.csv',index=False)

如果还有什么其他的要求,请参照上面的参数列表;如果上面的参数列表无法满足你的需求,请在下面评论,然后自己去百度。我看到之后会在第一时间百度然后把缺失补上,谢谢、


追加写入

df.to_csv(file_name, mode='a')

往指定位置写入

你在想什么??用Excel去


json

我觉得啊,以后使用这个函数的可能性也不大。
在这里插入图片描述
在这里插入图片描述

是吧,咱也不是什么知识都要牢记,要有的放矢。


Excel

Excel,我很喜欢用。但是今天,我产生了新的思考:将数据存起来不是最终目的,我们要达到的应该是根据实际场景选择最佳的存储方式。

而目前我能想到的方式有几种:
1、数据量不大,追求存储的速度。事后可以将缓存好的数据进行一波搬运即可。
2、数据量很大,那不用说了,数据库。
3、数据要进行分表。其实我有点纳闷儿,csv是不支持分表吗?那我如果多写几个csv呢?好像这样也不好,这种时候还是Excel来吧。
毕竟Excel有专业的分表工具,在内存中也只要走一个来回就好。

好了,不废话了,回主题:

def to_excel(excel_writer: Any,
sheet_name: str = "Sheet1",
columns: Any = None,
header: Any = True,
index: Any = True,
index_label: Any = None,
encoding: Any = None,
)

这些个参数不用我再释义了吧,这两篇前前后后都是这些参数。


不覆盖写入

但是呢,还有一个很严重的问题,就是追加写入的问题,是吧,在上面的参数里面其实是没有看到的,包括前面的csv,也没有提到啊。
我做完测试了一下,两次往同一个Excel页中写入,会造成覆盖。

这里要隆重介绍两个参数:

startrow: Any = 0, # 从哪一行开始写
startcol: Any = 0, # 从哪一列开始写

这俩参数是Excel的。


这就完了吗?那如果给你一个Excel,里面本来就已经有内容了,但是你并不知道内容有多少啊,那怎么办?

追加写入

我呀,查了老半天资料了,就查出来这么个结果:
1、你先读出来,然后如果要往底部追加,就算一下行数,要往右侧追加,就算一下列数。然后用上面的不覆盖写入的参数来办。
2、换个页写,干嘛要和以前原有的数据掺一块儿呢?

对于方法一:
注意,写入时需设置不包含列序号,行序号,即header=False,index=False

import pandas as pd
from openpyxl import load_workbook
result2=[('a','2','ss'),('b','2','33'),('c','4','bbb')]#需要新写入的数据
df = pd.DataFrame(result2,columns=['xuhao','id','name'])#列表数据转为数据框
df1 = pd.DataFrame(pd.read_excel('123.xlsx',sheet_name='aa')) #读取原数据文件和表
writer = pd.ExcelWriter('123.xlsx',engine='openpyxl')
book=load_workbook('123.xlsx')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df_rows = df1.shape[0] #获取原数据的行数
df.to_excel(writer, sheet_name='aa',startrow=df_rows+1, index=False, header=False)#将数据写入excel中的aa表,从第一个空行开始写
writer.save()#保存
writer.close()

如果是想在同一sheet换列追加数据,只需改一下2个参数即可。

df_cols = df1.shape[1]
staion.to_excel(writer, sheet_name=sheet_name, startcol=df_cols, index=False, header=False)

申明:我个人很不喜欢这个方法,但是不介意有朋友会喜欢这个方法。


对pandas操作Excel和csv的感触

花了一晚上,我决定了,专业的工作还是交给专业的工具来办吧,openpyxl不香吗?
是不会吗?我有教程啊!!!

Python之Excel 优雅操作手法 精选


往多个表中写入数据

这里需要使用到ExcelWriter

df = pd.read_csv(csv_file,parse_dates=['data'])
with pd.ExcelWriter('test4.xlsx') as f:
df.to_excel(f,sheet_name='a',columns=['a'],index=True,index_label='ID')
df.to_excel(f, sheet_name='b', columns=['b','data'], index=True, index_label='ID')

MySQL

这个还是用pandas吧,虽然也有专业的工具来适用,不过我还没专门写个教程。

保存数据到MySQL

def to_sql(
self,
name,
con,
schema=None,
if_exists="fail",
index=True,
index_label=None,
chunksize=None,
dtype=None,
method=None,
)

参数释义:(释义过的参数不再赘述)

schema:用于创建数据库对象,基本上都是使用默认值。

if_exists:如果表存在怎么办?

fail:抛出ValueError异常
replace:在插入数据之前删除表。注意不是仅删除数据,是删除原来的表,重新建表哦。
append:插入新数据。如果有主键,要避免主键冲突;看清表的格式,DataFrame的columns与表的columns是对应的;DF的index默认是作为一列数据的,也就是说默认会写入数据库的

index:将索引作为一列写入数据库,默认为True,也就是说默认DF的索引是要写入数据库的,index_label为列名

index_label:将索引写入数据库时的列名,默认为index;如果DF是多级索引,则index_label应为一个序列

chunksize:批处理,每次处理多少条数据。默认全部,一般没啥用,除非数据量太大,明显感觉卡的时候可以分批处理。

dtype:一个字典,指定列的数据类型。键是列的名字,值是sqlalchemy types或者sqlite3的字符串形式。如果是新建表,则需要指定类型,不然会以存储量最大类型作为默认类型。比如varchar类型就会成为text类型,空间资源浪费很多。如果是添加数据,则一般不需要规定该参数。

method:哪种类型的插入语句?

None:默认单行插入
‘multi’:多行插入
callable:以回调函数插入,写函数的名字,没用过。

最后总结

我怎么越写越觉得不对啊,是不是本末倒置了。
pandas是用来存数据的???

总觉得哪里怪怪的,绝对是本末倒置了!!!
下一篇就拉回正轨。

在这里插入图片描述

版权声明
本文为[看,未来]所创,转载请带上原文链接,感谢
https://lion-wu.blog.csdn.net/article/details/115468725

  1. Python brush questions - letter graphics
  2. Python数据分析入门(七):Pandas层级索引
  3. Introduction to Python data analysis (7): Pandas hierarchical index
  4. Python 操作腾讯云短信(sms)详细教程
  5. Python operation Tencent cloud SMS (SMS) detailed tutorial
  6. Python数据可视化,完整版实操指南 !
  7. Python data visualization, full version of the practical guide!
  8. 上手Pandas,带你玩转数据(2)-- 使用pandas从多种文件中读取数据
  9. 上手Pandas,带你玩转数据(1)-- 实例详解pandas数据结构
  10. Using pandas to read data from various files
  11. Hands on pandas, take you to play with data (1) -- detailed explanation of pandas data structure with examples
  12. Pandas数据结构基础用法
  13. Basic usage of pandas data structure
  14. Python读取ini配置文件,保存到对象属性
  15. Python reads the INI configuration file and saves it to the object properties
  16. Foundation of Python: classes in Python
  17. python刷题-闰年判断
  18. python刷题-01字串
  19. How to judge leap year
  20. Python brush title-01 string
  21. 安装python
  22. 按尺寸切片pandas数据集DataFrame到多个文件
  23. Install Python
  24. Slice the pandas dataset dataframe to multiple files by size
  25. python 求最大值、最小值、平均值
  26. Finding maximum, minimum and average in Python
  27. 认识Python解释器和PyCharm编辑器
  28. Know Python interpreter and pycharm editor
  29. Python 小数据池和代码块缓存机制
  30. Python small data pool and code block caching mechanism
  31. python刷题-序列求和
  32. python刷题-圆的面积
  33. Sequence summation in Python
  34. The area of a circle
  35. Python functions, advanced syntax and usage
  36. Teach you to crawl novels in Python! Who can pay for novels these days!
  37. Python入门学习之:10分钟1500访问量
  38. Introduction to Python: 1500 visits in 10 minutes
  39. 数据分析之Pandas合并操作总结
  40. OpenCV-Python 雪花飘落特效
  41. Pandas merge operation summary of data analysis
  42. Opencv Python snowflake falling effect
  43. python logging模块“另一个程序正在使用此文件,进程无法访问。”问题解决办法
  44. Python logging module "this file is being used by another program and cannot be accessed by the process." Problem solving
  45. Mac 下python3 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 解决方法
  46. Python 3 [SSL: Certificate] on MAC_ VERIFY_ Failed] certificate verify failed solution
  47. Python学习之解决python下载第三方依赖速度慢的问题
  48. Python learning to solve the problem of slow download speed of third party dependence on Python
  49. python操作Excel文件报lrd.biffh.XLRDError
  50. How to operate excel file with Python lrd.biffh.XLRDError
  51. 2021的挑战与机遇,今年Python数据分析岗位会很香!
  52. The challenge and opportunity of 2021, python data analysis post will be very popular this year!
  53. 【C++简明教程】Python和C++指定元素排序比较
  54. Comparison of Python and C + + specified element sorting
  55. Python Flask使用Nginx做代理时如何获取真实IP
  56. How to get real IP address when Python flash uses nginx as proxy
  57. Python培训出来好找工作吗?好找工作的关键是什么?
  58. Is Python training easy to find a job? What is the key to finding a good job?
  59. 从零开始学python | 什么是Python JSON?
  60. Learn Python from scratch | what is Python JSON?