master
/ 6.3 列表综合应用.ipynb

6.3 列表综合应用.ipynb @masterview markup · raw · history · blame

Notebook

6.10 pandas读写数据

列表类型经常被用于数据处理,而数据的存在形式主要有两种,一种是文件形式,一种是数据库形式。对于文本文件中数据,可以用遍历的方法简单的读取,对于其他格式的数据文件或存储在数据库中的数据,可以借助Pandas库来读取。

Pandas是基于Numpy的一个开源库,提供了高性能和高可用性的数据结构用于解决数据分析问题,他纳入了大量的库和一些标准的数据模型,提供了可用于高效操作大型数据集的工具,是使Python成为强大而高效的数据分析工具的重要因素之一。

Pandas兼容所有Python的数据类型,除此外,还支持两种数据结构:
一维数组Series
二维表格型数据结构DataFrame
本章,我们只介绍利用Pandas读取数据的相关知识。

Pandas是第三方库,使用之前需要先安装,安装命令:

pip install pandas

通常,Pandas的引用方式为:

import pandas as pd

Pandas输入输出API提供了对文本、二进制和结构化查询语言(SQL)等不同格式类型文件的读写函数,可以方便快速的读取本地文件,如csv、txt、json和html等文本文件、Excel文件以及关系型数据库中的数据。
其主要方法如表6.2所示。 表 6.2 Pandas常用输入输出API

格式类型 数据描述
文本 CSV read_csv() to_csv()
文本 JSON read_json() to_json()
文本 HTML read_html() to_html()
二进制 MS Excel read_excel() to_excel()
二进制 Python Pickle Format read_pickle() to_pickle()
SQL SQL read_sql() to_sql()

这些API可以方便的把各种类型的数据读取为Dataframe格式的数据,再用利用tolist()函数便可将其转为列表类型,这样就可以利用本章学习的方法进行数据分析和处理了。

6.10.1 读Excel文件中数据

用Pandas可以读取Excel文件中的数据为Dataframe类型,Excel文件的读取主要应用read_excel()方法,使用时可能需要先用“pip install xlrd”安装xlrd模块。
read_excel()方法大部分参数都有默认值,只需要设置少量的参数便可以完成大部分的数据读取工作。
其主要参数及其意义如下:

pd.read_excel(io, sheet_name=0, header=0, names=None, usecols=None, squeeze=False, converters=None, skiprows=None, nrows=None, skipfooter=0)
  1. io:Excel的存储路径
  2. sheet_name:要读取的工作表名称,默认读取第一个工作表。可以是整型数字、列表名或SheetN。整型数字:目标sheet所在的位置,以0为起始,比如sheet_name = 1代表第2个工作表。列表名:目标sheet的名称,中英文皆可。SheetN:代表第N个sheet,S要大写,注意与整型数字的区别。
  3. header:用哪一行作列名。默认为0 ,如果设置为[0,1],则表示将前两行作为多重索引。
  4. names:自定义最终的列名。一般适用于Excel缺少列名,或者需要重新定义列名的情况。names的长度必须和Excel列长度一致,否则会报错。
  5. index_col:用作索引的列
  6. usecols:需要读取哪些列。可以使用整型,从0开始,如[0,2,3];也可以使用Excel传统的列名A、B等字母,如"A:C, E" = "A, B, C, E",注意两边都包括。usecols 可避免读取全量数据,而是以分析需求为导向选择特定数据,提高效率。
  7. squeeze:当数据仅包含一列。squeeze为True时,返回Series,反之返回DataFrame。
  8. converters:强制规定列数据类型,主要用途是保留以文本形式存储的数字。 pandas默认将文本类的数据读取为整型,converters 参数可以指定各列数据的类型,如converters = {'出货量':float, '月份':str }, 将“出货量”列数据类型规定为浮点数,“月份”列规定为字符串类型。
  9. skiprows:跳过特定行。skiprows= n 跳过前n行; skiprows = [a, b, c] 跳过第a+1,b+1,c+1行(索引从0开始)。
  10. nrows:需要读取的行数,nrows = n 读取前n行。
  11. skipfooter: 跳过末尾行数,skipfooter = n 跳过末尾的n行。

实例 6.6 读取Excel文件中的证券数据

In [2]:
import pandas as pd
 
data_df = pd.read_excel('images/ch6/6.6 stock.xlsx') # 读取数据为dataframe类型
print(data_df)
          时间    ETF     华夏     博时     广发     券商    创业板
0 2018-01-15  4.265  4.560  1.650  1.736  0.920  1.634
1 2018-01-16  4.308  4.595  1.700  1.750  0.941  1.631
2 2018-01-17  4.295  4.590  1.699  1.740  0.973  1.639
3 2018-01-18  4.323  4.621  1.675  1.744  0.980  1.636
4 2018-01-19  4.335  4.632  1.683  1.740  1.002  1.630
In [5]:
import pandas as pd
 
data_df = pd.read_excel('images/ch6/6.6 stock.xlsx') # 读取数据为dataframe类型
title = data_df.columns.tolist()                         # dataframe数据中标题行转为列表类型
print('输出列表类型的表头\n',title)                      # 输出列表类型数据
print()

data_ls = data_df.values.tolist()                        # dataframe数据转为列表类型
print('输出列表类型的数据\n',data_ls)                    # 输出列表类型数据
输出列表类型的表头
 ['时间', 'ETF', '华夏', '博时', '广发', '券商', '创业板']

输出列表类型的数据
 [[Timestamp('2018-01-15 00:00:00'), 4.265, 4.56, 1.65, 1.736, 0.92, 1.634], [Timestamp('2018-01-16 00:00:00'), 4.308, 4.595, 1.7, 1.75, 0.941, 1.631], [Timestamp('2018-01-17 00:00:00'), 4.295, 4.59, 1.699, 1.74, 0.973, 1.639], [Timestamp('2018-01-18 00:00:00'), 4.323, 4.621, 1.675, 1.744, 0.98, 1.636], [Timestamp('2018-01-19 00:00:00'), 4.335, 4.632, 1.683, 1.74, 1.002, 1.63]]
[[Timestamp('2018-01-15 00:00:00'),4.265, 4.56, 1.65, 1.736, 0.92, 1.634], 
[Timestamp('2018-01-16 00:00:00'), 4.308, 4.595, 1.7, 1.75, 0.941, 1.631], 
[Timestamp('2018-01-17 00:00:00'), 4.295, 4.59, 1.699, 1.74, 0.973, 1.639], 
[Timestamp('2018-01-18 00:00:00'), 4.323, 4.621, 1.675, 1.744, 0.98, 1.636], 
[Timestamp('2018-01-19 00:00:00'), 4.335, 4.632, 1.683, 1.74, 1.002, 1.63]]

值得注意的是,与遍历方法读取文件不同,用缺省参数读取的数据中,数值类型的数据直接被转为数值型,可以直接参与数值运算和统计分析。
日期读取为日期时间戳类型,可以用strftime()转为字符串。

In [6]:
import pandas as pd
 
data_df = pd.read_excel('images/ch6/6.6 stock.xlsx') # 读取数据为dataframe类型

data_ls = data_df.values.tolist()                        # dataframe数据转为列表类型

for lst in data_ls:
    lst[0] = lst[0].strftime("%Y-%m-%d")                 # 日期时间格式化为年-月-日形式
print('输出列表类型的数据\n', data_ls)                   # 输出列表类型数据
输出列表类型的数据
 [['2018-01-15', 4.265, 4.56, 1.65, 1.736, 0.92, 1.634], ['2018-01-16', 4.308, 4.595, 1.7, 1.75, 0.941, 1.631], ['2018-01-17', 4.295, 4.59, 1.699, 1.74, 0.973, 1.639], ['2018-01-18', 4.323, 4.621, 1.675, 1.744, 0.98, 1.636], ['2018-01-19', 4.335, 4.632, 1.683, 1.74, 1.002, 1.63]]
[['2018-01-15', 4.265, 4.56, 1.65, 1.736, 0.92, 1.634], 
['2018-01-16', 4.308, 4.595, 1.7, 1.75, 0.941, 1.631], 
['2018-01-17', 4.295, 4.59, 1.699, 1.74, 0.973, 1.639], 
['2018-01-18', 4.323, 4.621, 1.675, 1.744, 0.98, 1.636], 
['2018-01-19', 4.335, 4.632, 1.683, 1.74, 1.002, 1.63]]
In [ ]:
pip install openpyxl

6.10.2 读文本文件中数据

读文本文件和csv文件进列表,对列表中的数据进行统计分析。将用常规分隔符分隔的文本文件读取到DataFrame可以使用read_csv()方法

其主要参数及意义如下:

pandas.read_csv(filepath_or_buffer, sep='\t', delimiter=None, header='infer', names=None, engine=Noneencoding=None)
  1. filepath_or_buffer:带路径文件名或URL,字符串类型。
  2. sep:分隔符,缺省值为'\t',当文本中的分隔符不是制表符时,可用sep=’分隔符’来指定。Python可自动检测分隔符。
  3. delimiter:参数sep的替代参数,缺省值为None。
  4. header:整型或整型列表,用作列名的行号和数据的开头。
  5. names:要使用的列名的列表,如果文件不包含标题行,则应显式传递header = None。
  6. engine:使用解析器引擎,其值可为'c'或'python'。c引擎速度更快,而Python引擎目前功能更加完善。
  7. encoding:默认None,编码在读/写时用UTF(例如'utf-8')

实例 6.7读取csv文件中的数据

In [ ]:
import pandas as pd
 
score_df = pd.read_csv('images/ch6/6.7 score.csv',encoding='utf-8') # dataframe
print(score_df)                                          # 查看数据格式
In [ ]:
import pandas as pd
 
score_df = pd.read_csv('images/ch6/6.7 score.csv',encoding='utf-8') # dataframe
title = score_df.columns.tolist()                         # dataframe数据中标题行转为列表类型
score_ls = [title] + score_df.values.tolist()                            # 转为列表类型
print('输出列表类型的数据\n',score_ls)                     # 输出列表数据
[['姓名', 'C语言', 'Java', 'Python', 'C#']
['罗明', 95, 96, 85, 63, 91], 
['朱佳', 75, 93, 66, 85, 88], 
['李思', 86, 76, 96, 93, 67], 
['郑君', 88, 98, 76, 90, 89], 
['王雪', 99, 96, 91, 88, 86]]

6.3.3 读数据库中数据

在实际应用中,使用文本文件或Excel存储数据并不是最好的方式,我们能够对这些类型的文件中的数据能的操作非常有限,数据处理效率也不高,更常用的方式是将数据存储到数据库中,通过连接数据库进行相关操作。 目前应用最多的是关系型数据库,关系型数据库的主要构成是二维表。
二维表包含多行多列,把一个表中的数据用Python表现出来,可以用一个列表表示多行,列表的每一个元素用一个元组表示二维表中的一行记录。

比如一个二维表包含ID、姓名、年龄、籍贯、薪水,可以用以下形式表示:

[(1, '李明', 23, '吉林', 20000.00), 
(2, '韩雷', 26, '湖北', 25000.00), 
(3, '肖红', 30, '江西', 30000.00)]

这种表示方法无法直观的展示关系数据库的表结构,可以使用对象-关系映射 (ORM:Object-Relational Mapping)技术把关系数据库的表结构映射到对象上。在Python中,广泛应用的一个对象-关系映射框架是SQLAlchemy,这个框架可以为开发者提供高效的数据库访问设计和高性能的数据访问方法,实现了完整的企业级持久模型。

SQLAlchemy支持大部分主流数据库,如SQLite、MySQL、Postgres、Oracle、MS SQLServer 和 Firebird等。在使用之前,需要通过pip install sqlalchemy安装这个库。

SQLite是Python 内置的一个轻量级数据库,可以直接使用。使用其他数据库时,需要pip安装与数据库匹配的驱动,例如mysqlclient、 pymssql、 psycopg2、 cx-Oracle或 fdb等。只有安装数据库的驱动之后,才可以连接数据库对数据进行操作。本书以SQLite数据库作为范例进行讲解。

sqlalchemy.create_engine(*args, **kwargs)函数可被用于创建数据库引擎,数据库位置可用本地路径,也可用网络URL。

In [18]:
from sqlalchemy import *
import pandas as pd
 
# 定义元信息,绑定到引擎,test.db为数据库名,./表示当前路径。
engine = create_engine('sqlite:////images/ch6/6.8 test.db', echo=True)
metadata = MetaData(engine)        # 绑定元信息

Pandas中的read_sql()方法可以查询数据库中的数据并直接返回DateFrame,在方法的参数中可以传入SQL语句。read_sql()方法的主要参数及意义如下:

pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
  1. sql : 表名或查询语句
  2. con : 连接数据库的引擎,一般可以用SQLAlchemy之类的模块创建
  3. columns : 需要从表中查询的列名的列表

实例 6.8 读取SQLite数据库中的数据

SQLite数据库中文件“6.8 test.db”的score表中存储了学生的成绩数据,请将数据库中的数据读入到列表中。

In [20]:
from sqlalchemy import *
import pandas as pd
 
# 定义引擎,6.8 test.db为数据库名,./表示当前路径
engine = create_engine('sqlite:////images/ch6/6.8 test.db')  # , echo=True)
score_df = pd.read_sql('score', engine)  # 从score表读数据dataframe
print(score_df)                          # 查看输出dataframe格式数据
---------------------------------------------------------------------------
OperationalError                          Traceback (most recent call last)
~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _wrap_pool_connect(self, fn, connection)
   3279         try:
-> 3280             return fn()
   3281         except dialect.dbapi.Error as e:

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in connect(self)
    309         """
--> 310         return _ConnectionFairy._checkout(self)
    311 

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in _checkout(cls, pool, threadconns, fairy)
    867         if not fairy:
--> 868             fairy = _ConnectionRecord.checkout(pool)
    869 

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in checkout(cls, pool)
    475     def checkout(cls, pool):
--> 476         rec = pool._do_get()
    477         try:

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/impl.py in _do_get(self)
    255     def _do_get(self):
--> 256         return self._create_connection()
    257 

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in _create_connection(self)
    255 
--> 256         return _ConnectionRecord(self)
    257 

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in __init__(self, pool, connect)
    370         if connect:
--> 371             self.__connect()
    372         self.finalize_callback = deque()

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in __connect(self)
    665             with util.safe_reraise():
--> 666                 pool.logger.debug("Error on connect(): %s", e)
    667         else:

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py in __exit__(self, type_, value, traceback)
     71                     exc_value,
---> 72                     with_traceback=exc_tb,
     73                 )

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/util/compat.py in raise_(***failed resolving arguments***)
    206         try:
--> 207             raise exception
    208         finally:

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in __connect(self)
    660             self.starttime = time.time()
--> 661             self.dbapi_connection = connection = pool._invoke_creator(self)
    662             pool.logger.debug("Created new connection %r", connection)

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/create.py in connect(connection_record)
    589                         return connection
--> 590             return dialect.connect(*cargs, **cparams)
    591 

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/default.py in connect(self, *cargs, **cparams)
    596         # inherits the docstring from interfaces.Dialect.connect
--> 597         return self.dbapi.connect(*cargs, **cparams)
    598 

OperationalError: unable to open database file

The above exception was the direct cause of the following exception:

OperationalError                          Traceback (most recent call last)
/tmp/ipykernel_391/2569192401.py in <module>
      4 # 定义引擎,6.8 test.db为数据库名,./表示当前路径
      5 engine = create_engine('sqlite:////images/ch6/6.8 test.db')  # , echo=True)
----> 6 score_df = pd.read_sql('score', engine)  # 从score表读数据dataframe
      7 print(score_df)                          # 查看输出dataframe格式数据

~/.virtualenvs/basenv/lib/python3.7/site-packages/pandas/io/sql.py in read_sql(sql, con, index_col, coerce_float, params, parse_dates, columns, chunksize)
    632             coerce_float=coerce_float,
    633             parse_dates=parse_dates,
--> 634             chunksize=chunksize,
    635         )
    636 

~/.virtualenvs/basenv/lib/python3.7/site-packages/pandas/io/sql.py in read_query(self, sql, index_col, coerce_float, parse_dates, params, chunksize, dtype)
   1577         args = _convert_params(sql, params)
   1578 
-> 1579         result = self.execute(*args)
   1580         columns = result.keys()
   1581 

~/.virtualenvs/basenv/lib/python3.7/site-packages/pandas/io/sql.py in execute(self, *args, **kwargs)
   1422     def execute(self, *args, **kwargs):
   1423         """Simple passthrough to SQLAlchemy connectable"""
-> 1424         return self.connectable.execution_options().execute(*args, **kwargs)
   1425 
   1426     def read_table(

<string> in execute(self, statement, *multiparams, **params)

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/util/deprecations.py in warned(fn, *args, **kwargs)
    399         if not skip_warning:
    400             _warn_with_version(message, version, wtype, stacklevel=3)
--> 401         return fn(*args, **kwargs)
    402 
    403     doc = func.__doc__ is not None and func.__doc__ or ""

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/base.py in execute(self, statement, *multiparams, **params)
   3173 
   3174         """
-> 3175         connection = self.connect(close_with_result=True)
   3176         return connection.execute(statement, *multiparams, **params)
   3177 

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/base.py in connect(self, close_with_result)
   3232         """
   3233 
-> 3234         return self._connection_cls(self, close_with_result=close_with_result)
   3235 
   3236     @util.deprecated(

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/base.py in __init__(self, engine, connection, close_with_result, _branch_from, _execution_options, _dispatch, _has_events, _allow_revalidate)
     94                 connection
     95                 if connection is not None
---> 96                 else engine.raw_connection()
     97             )
     98 

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/base.py in raw_connection(self, _connection)
   3311 
   3312         """
-> 3313         return self._wrap_pool_connect(self.pool.connect, _connection)
   3314 
   3315 

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _wrap_pool_connect(self, fn, connection)
   3282             if connection is None:
   3283                 Connection._handle_dbapi_exception_noconnection(
-> 3284                     e, dialect, self
   3285                 )
   3286             else:

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _handle_dbapi_exception_noconnection(cls, e, dialect, engine)
   2116         elif should_wrap:
   2117             util.raise_(
-> 2118                 sqlalchemy_exception, with_traceback=exc_info[2], from_=e
   2119             )
   2120         else:

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/util/compat.py in raise_(***failed resolving arguments***)
    205 
    206         try:
--> 207             raise exception
    208         finally:
    209             # credit to

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _wrap_pool_connect(self, fn, connection)
   3278         dialect = self.dialect
   3279         try:
-> 3280             return fn()
   3281         except dialect.dbapi.Error as e:
   3282             if connection is None:

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in connect(self)
    308 
    309         """
--> 310         return _ConnectionFairy._checkout(self)
    311 
    312     def _return_conn(self, record):

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in _checkout(cls, pool, threadconns, fairy)
    866     def _checkout(cls, pool, threadconns=None, fairy=None):
    867         if not fairy:
--> 868             fairy = _ConnectionRecord.checkout(pool)
    869 
    870             fairy._pool = pool

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in checkout(cls, pool)
    474     @classmethod
    475     def checkout(cls, pool):
--> 476         rec = pool._do_get()
    477         try:
    478             dbapi_connection = rec.get_connection()

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/impl.py in _do_get(self)
    254 
    255     def _do_get(self):
--> 256         return self._create_connection()
    257 
    258     def recreate(self):

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in _create_connection(self)
    254         """Called by subclasses to create a new ConnectionRecord."""
    255 
--> 256         return _ConnectionRecord(self)
    257 
    258     def _invalidate(self, connection, exception=None, _checkin=True):

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in __init__(self, pool, connect)
    369         self.__pool = pool
    370         if connect:
--> 371             self.__connect()
    372         self.finalize_callback = deque()
    373 

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in __connect(self)
    664         except Exception as e:
    665             with util.safe_reraise():
--> 666                 pool.logger.debug("Error on connect(): %s", e)
    667         else:
    668             # in SQLAlchemy 1.4 the first_connect event is not used by

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py in __exit__(self, type_, value, traceback)
     70                 compat.raise_(
     71                     exc_value,
---> 72                     with_traceback=exc_tb,
     73                 )
     74         else:

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/util/compat.py in raise_(***failed resolving arguments***)
    205 
    206         try:
--> 207             raise exception
    208         finally:
    209             # credit to

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/pool/base.py in __connect(self)
    659         try:
    660             self.starttime = time.time()
--> 661             self.dbapi_connection = connection = pool._invoke_creator(self)
    662             pool.logger.debug("Created new connection %r", connection)
    663             self.fresh = True

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/create.py in connect(connection_record)
    588                     if connection is not None:
    589                         return connection
--> 590             return dialect.connect(*cargs, **cparams)
    591 
    592         creator = pop_kwarg("creator", connect)

~/.virtualenvs/basenv/lib/python3.7/site-packages/sqlalchemy/engine/default.py in connect(self, *cargs, **cparams)
    595     def connect(self, *cargs, **cparams):
    596         # inherits the docstring from interfaces.Dialect.connect
--> 597         return self.dbapi.connect(*cargs, **cparams)
    598 
    599     def create_connect_args(self, url):

OperationalError: (sqlite3.OperationalError) unable to open database file
(Background on this error at: https://sqlalche.me/e/14/e3q8)
姓名  C语言  Java  Python  C#  C++
0  罗明   95    96      85  63   91
1  朱佳   75    93      66  85   88
2  李思   86    76      96  93   67
3  郑君   88    98      76  90   89
4  王雪   99    96      91  88   86
In [ ]:
from sqlalchemy import *
import pandas as pd
 
# 定义引擎,6.8 test.db为数据库名,./表示当前路径
engine = create_engine('images/ch6/6.8 test.db')  # , echo=True)
score_df = pd.read_sql('score', engine)  # 从score表读数据dataframe

title = score_df.columns.tolist()             # dataframe数据转为列表类型
score_ls = score_df.values.tolist()            # dataframe数据转为列表类型
print('输出列表类型的数据:\n', [title] + score_ls)      # 输出转为列表的数据
In [ ]:
```python
[['姓名', 'C语言', 'Java', 'Python', 'C#', 'C++'], 
 ['罗明', 95, 96, 85, 63, 91], 
 ['朱佳', 75, 93, 66, 85, 88], 
 ['李思', 86, 76, 96, 93, 67], 
 ['郑君', 88, 98, 76, 90, 89], 
 ['王雪', 99, 96, 91, 88, 86]]
```
In [ ]:
 
In [ ]:
pip install sqlalchemy

类似的方法,也可以从json格式的文件中读取数据到列表:

In [21]:
import pandas as pd
 
score_df = pd.read_json('images/ch6/6.8 scoreTest.json', encoding='utf-8') 
title = score_df.columns.tolist()             # dataframe数据转为列表类型
score_ls = score_df.values.tolist()            # dataframe数据转为列表类型
print('输出列表类型的数据:\n', [title] + score_ls)      # 输出转为列表的数据
输出列表类型的数据:
 [['姓名', 'C语言', 'Java', 'Python', 'C#', 'C++'], ['罗明', 95, 96, 85, 63, 91], ['朱佳', 75, 93, 66, 85, 88], ['李思', 86, 76, 96, 93, 67], ['郑君', 88, 98, 76, 90, 89], ['王雪', 99, 96, 91, 88, 86]]

pandas 数据显示

若csv文件的某列中有逗号,一般会将该列数据放到一对比引号中。pandas读csv文件时,可以将引号中的数据自动处理为一个元素,用pandas处理此类数据,可以避免用切分方法导致的误切分。

In [22]:
import pandas as pd

wine_reviews = pd.read_csv("images/ch6/winemag-data.csv")
print(wine_reviews.shape)                     # ((12973, 6)
pd.set_option('display.max_columns', None)   # 显示所有列
pd.set_option('display.max_rows', None)      # 显示所有行
pd.set_option('display.width', None)         # 显示宽度是无限
print(wine_reviews.head())                   # 返回数据的前5行
(12973, 6)
   number country                                        description  points  \
0       0   Italy  Aromas include tropical fruit, broom, brimston...      87   
1      10      US  Soft, supple plum envelopes an oaky structure ...      87   
2      20      US  Ripe aromas of dark berries mingle with ample ...      87   
3      30  France  Red cherry fruit comes laced with light tannin...      86   
4      40   Italy  Catarratto is one of Sicily's most widely farm...      86   

   price           province  
0   13.0  Sicily & Sardinia  
1   19.0         California  
2   23.0           Virginia  
3   15.0         Beaujolais  
4   17.0  Sicily & Sardinia  
In [ ]: