Pandas如何读取和导出 Excel、CSV、JSON 数据?

转载自:Pandas如何读取和导出 Excel、CSV、JSON 数据? - 知乎

导入pandas等包

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

修改pandas的行和列可以一次性显示多少出来。这个不要设置太多了,在IPython里面打印很大的表格速度会非常慢。

#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)

一、导入数据

读取csv文件:

pd.read_csv(file_name, index_col=0,sep=';',encoding='utf_8_sig',\
names=['customer','restaurant'], low_memory=False, parse_dates = ['date'])

# index_col=0表示把csv中的第一列作为dataframe的index
# encoding指定了用什么编码格式读取,主要解决中文字符识别的问题
# sep表示csv里面用什么作为分隔符,默认是英文逗号,这里改成了英文分号
# names表示手动指定每一列的名字
# low_memory=False表示让pandas可以处理同一列里面有多种数据类型的情况
# parse_dates指定了某一列为datetime格式

读取Excel文件:

pd.read_excel('JuiceBlending_Data(1).xlsx',sheet_name='Specs of historical orders',\
 usecols='A,DA', nrows=11,header=2,index_col=0, engine='openpyxl')

# sheet_name指定了读取excel里面的哪一个sheet
# usecols指定了读取哪些列
# nrows指定了总共读取多少行
# header指定了列名在第几行,并且只读取这一行往下的数据
# index_col指定了index在第几列
# engine='openpyxl' 指定了使用什么引擎来读取excel文件

读取json文件:

data = pd.read_json('all_50_schemas.json',lines=True)

# 其中lines=True表示一个文件里面有多个字典

设置最多显示100行100列:

pd.set_option('display.max_columns',100)
pd.set_option('display.max_rows',100)

二、导出数据

保存成csv:

data_new.to_csv(filename,sep=':',header=False, encoding='utf_8_sig', index=False)

# index: 是否保存行的名字
# header:是否保存列的名字

保存成excel文件:

data.to_excel(r'output_list1.xls', index=False, sheet_name='Data', float_format="%.0f", freeze_panes=(1,4))

# index表示是否保存dataframe的index
# sheet_name表示worksheet的名字
# float_format表示整个Excel Worksheet中的数字保留几位小数
# freeze_panes表示从第几行、第几列开始冻结单元格,从1开始计数。

保存到一个excel文件的多个工作表 ---- 法一:

使用 pd.ExcelWriter(file_name, mode='a', engine="openpyxl")。我们在这里可以调用的 engine 有两个,一个是xlsxwriter,另一个是openpyxl。在这里是通过设置 mode='a' 来实现工作表的追加的(append),默认状态下,这个参数是 'w',即write。注意,只有 openpyxl 引擎支持这个模式,xlsxwriter 不支持。

data = pd.DataFrame(
       {"col1":[1, 2, 3], 
        "col2":[4, 5, 6], 
        "col3":[7, 8, 9]
        }
       )
with pd.ExcelWriter("excel 样例.xlsx", mode='a', engine='openpyxl') as writer:
       data.to_excel(writer, sheet_name="这是追加的第1个sheet")
       data.to_excel(writer, sheet_name="这是追加的第2个sheet")

保存到一个excel文件的多个工作表 ---- 法二:

with pd.ExcelWriter('衍生数据.xlsx') as writer:
    for group in out_df_group:
        print()
        # 提取worksheets的名字,以及万得指标编码
        sheet_name = group[0]

        # 存储到excel
        group[1].to_excel(excel_writer=writer,sheet_name=sheet_name,index=True)
        print('Finished')

保存成数据库文件:

from sqlalchemy import create_engine
engine= create_engine('sqlite:///foo.db')
df.to_sql('df', engine)

三、Bonus:从内存中读取数据到 DataFrame 中

我们不一定要从文件中读取数据到 pandas 中,还可以直接从内存中读取数据,例如:

import io

data="""
CAT|DATE|VALUE
abc|0101|10
abc|0103|20
abc|0106|15"""

df = pd.read_csv(io.StringIO(data), skiprows=1, sep="|", dtype={"DATE":"str"})
print(df)

其中,io 是一个 Python 中用于处理”流“(Stream)的工具,具体可以参考官方文档:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值