Создание DataFrame: 10 способов на выбор

pandas
Создание DataFrame: 10 способов на выбор

Публичный аккаунт WeChat: You Er Hut
Автор: Питер
Редактор: Питер

Создание данных DataFrame

В предыдущей статье я представил два важных типа структур данных в pandas: тип Series и тип DataFrame, а также подробно объяснил, как создавать данные Series.

В этой статье рассказывается, как создавать данные DataFrame, которые также являются наиболее часто используемым типом данных в пандах. Его необходимо освоить. Почти все последующие сериализованные статьи основаны на операциях с данными DataFrame.

Расширенное чтение

1. Вступительная работа Панд:Использование функции взрыва в Pandas

2. Первая часть серии Pandas:Создание данных типа серии

библиотека импорта

Pandas и numpy рекомендуется устанавливать через anaconda; pymysql в основном является сторонней библиотекой, используемой python для подключения к базе данных и последующего выполнения библиотечных операций с таблицами, которую также необходимо сначала установить

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

import pymysql   # 安装:pip install pymysql

10 способов создания данных DataFrame

Ниже описано, как создавать данные DataFrame различными способами.Последняя функция, используемая во всех методах: pd.DataFrame()

Создать пустой DataFrame

1. Создать полностью пустые данные

Создайте пустые данные DataFrame и обнаружите, что ничего не выводится; но с помощью проверки функции type() обнаруживается, что данные относятся к типу DataFrame.

2. Создайте данные со значением NaN

df0 = pd.DataFrame(
  columns=['A','B','C'], # 指定列属性
  index=[0,1,2]  # 指定行索引
) 

df0

Измените индекс строки данных:

df0 = pd.DataFrame(
  columns=['A','B','C'], 
  index=[1,2,3]  # 改变行索引:从1开始
)

df0

Создайте DataFrame вручную

Перечислите данные каждого поля столбца в виде списка

df1 = pd.DataFrame({  
    "name":["小明","小红","小侯","小周","小孙"],   
    "sex":["男","女","女","男","男"],
    "age":[20,19,28,27,24],
    "class":[1,2,2,1,2]
})

df1

чтение создания локального файла

панды могут создавать данные DataFrame, читая локальные файлы Excel, CSV, JSON и другие файлы.

1. Прочитайте CSV-файл

Например, данные чэндуской кухни, на которую я когда-то залез, в формате CSV:

df2 = pd.read_csv("成都美食.csv")   # 括号里面填写文件的路径:本文的文件在当然目录下
df2

2. Прочитайте файл Excel

Если это файл Excel, его также можно прочитать:

df3 = pd.read_excel("成都美食.xlsx")
df3.head()  # 默认显示前5行数据

3. Прочтите json-файл

Например, в локальном текущем каталоге есть данные формата json:

Читайте через панд:

df4 = pd.read_json("information.json")
df4

4. Прочитайте файл TXT

В локальном текущем каталоге есть файл TXT, как показано ниже:

df5 = pd.read_table("text.txt")
df5

Если на приведенном выше рисунке параметры не указаны: панды будут использовать первую строку данных в качестве поля столбца (не тот результат, который нам нужен), и указать измененный код параметров:

df7 = pd.read_table(
  "text.txt",   # 文件路径
  names=["姓名","年龄","性别","省份"],   # 指定列属性
  sep=" "  # 指定分隔符:空格
)

df7

Другим решением является непосредственное изменение txt-файла и добавление нужных атрибутов поля столбца вверху: так, чтобы верхняя строка данных использовалась как поле столбца.

姓名 年龄  性别 出生地
小明  20   男  深圳
小红  19   女  广州
小孙  28   女  北京
小周  25   男  上海
小张  22   女  杭州

чтение файла базы данных

1. Сначала установите pymysql

В этой статье рассказывается, как работать с базой данных через библиотеку pymysql, а затем читать данные через pandas.Сначала установите библиотеку pymysql (притворитесь, что знаете ее):

pip install pymysql

Сначала просмотрите данные в таблице в локальной базе данных: прочитайте все данные в таблице Student.

Реальные данные выглядят так:

2. Установите соединение

connection = pymysql.connect(
    host="IP地址",
    port=端口号,
    user="用户名",
    password="密码",
    charset="字符集",
    db="库名"
)

cur = connection.cursor()   # 建立游标

# 待执行的SQL语句
sql = """   
select * from Student
"""

# 执行SQL
cur.execute(sql)

3. Вернуть результат выполнения

data = []

for i in cur.fetchall():
    data.append(i)   # 将每条结果追加到列表中

data

4. Создайте данные DataFrame

df8 = pd.DataFrame(data,columns=["学号","姓名","出生年月","性别"])   # 指定每个列属性名称
df8

Создать с помощью словаря Python

1. Создайте словарь, содержащий список

# 1、包含列表的字典

dic1  = {"name":["小明","小红","小孙"],  
        "age":[20,18,27],
        "sex":["男","女","男"]
       }
dic1

df9 = pd.DataFrame(dic1,index=[0,1,2])
df9

2. Создайте вложенный словарь в словаре

# 嵌套字典的字典

dic2 = {'数量':{'苹果':3,'梨':2,'草莓':5},
       '价格':{'苹果':10,'梨':9,'草莓':8},
        '产地':{'苹果':'陕西','梨':'山东','草莓':'广东'}
      }

dic2

# 结果
{'数量': {'苹果': 3, '梨': 2, '草莓': 5},
 '价格': {'苹果': 10, '梨': 9, '草莓': 8},
 '产地': {'苹果': '陕西', '梨': '山东', '草莓': '广东'}}

Результат создается как:

создание списка на питоне

1. Используйте индекс строки по умолчанию

lst = ["小明","小红","小周","小孙"]
df10 = pd.DataFrame(lst,columns=["姓名"])
df10

Индекс можно изменить:

lst = ["小明","小红","小周","小孙"]

df10 = pd.DataFrame(
  lst,
  columns=["姓名"],
  index=["a","b","c","d"]   # 修改索引
)

df10

3. Вложенные списки в списках

# 嵌套列表形式

lst = [["小明","20","男"],
       ["小红","23","女"],
       ["小周","19","男"],
       ["小孙","28","男"]
      ]

df11 = pd.DataFrame(lst,columns=["姓名","年龄","性别"])
df11

создание кортежа python

Кортежи создаются аналогично спискам: они могут быть одноуровневыми или вложенными.

1. Создание одноуровневого кортежа

# 单层元组

tup = ("小明","小红","小周","小孙")
df12 = pd.DataFrame(tup,columns=["姓名"])

df12

2. Вложение кортежей

# 嵌套元组

tup = (("小明","20","男"),
       ("小红","23","女"),
       ("小周","19","男"),
       ("小孙","28","男")
      )

df13 = pd.DataFrame(tup,columns=["姓名","年龄","性别"])
df13

Создать с данными серии

DataFrame — это двумерная структура данных, образованная путем слияния нескольких рядов по столбцам.Каждый столбец выделяется как ряд, поэтому мы можем создать его непосредственно из данных ряда.

series = {'水果':Series(['苹果','梨','草莓']),
          '数量':Series([60,50,100]),
          '价格':Series([7,5,18])
         }

df15 = pd.DataFrame(series)
df15

создание пустого массива

1. Используйте функции в numpy для создания

# 1、使用numpy生成的数组

data1 = {
    "one":np.arange(4,10),  # 产生6个数据
    "two":range(100,106),
    "three":range(20,26)
} 

df16 = pd.DataFrame(
  data1,
  index=['A','B','C','D','E','F']   # 索引长度和数据长度相同
)

df16

2. Создавайте напрямую через массивы numpy

# 2、numpy数组创建

# reshape()函数改变数组的shape值
data2 = np.array(["小明","广州",175,"小红","深圳",165,"小周","北京",170,"小孙","上海",180]).reshape(4,3)

data2

df17 = pd.DataFrame(
  data2,   # 传入数据
  columns=["姓名","出生地","身高"],  # 列属性
  index=[0,1,2,3]  # 行索引
)

df17

3. Используйте случайную функцию в numpy

# 3、numpy中的随机函数生成

# 创建姓名、学科、学期、班级4个列表
name_list = ["小明","小红","小孙","小周","小张"]
subject_list = ["语文","数学","英文","生物","物理","地理","化学","体育"]
semester_list = ["上","下"]
class_list = [1,2,3]

# 生成40个分数:在50-100之间
score_list = np.random.randint(50,100,40).tolist()   # 50-100之间选择40个数

40 случайно сгенерированных очков:

Случайная генерация данных выполняется методом выбора модуля random в numpy:

df18 = pd.DataFrame({
    "name": np.random.choice(name_list,40,replace=True),   # replace=True表示抽取后放回(默认),所以存在相同值
    "subject": np.random.choice(subject_list,40),
    "semester": np.random.choice(semester_list,40),
    "class":np.random.choice(class_list,40),
    "score": score_list
})

df18

Используйте конструктор from_dict

В pandas есть конструктор, связанный со словарем:DataFrame.from_dict.

Он берет словарь словарей или словарь последовательностей массивов и создает DataFrame. КромеorientПараметр по умолчанию равенcolumns, работа этого построителя такая же, какDataFrameСтроители похожи. Пучокorientпараметр установлен на'index', вы можете использовать ключи словаря в качестве меток строк.

df19 = pd.DataFrame.from_dict(dict([('姓名', ['小明', '小红', '小周']), 
                                    ('身高', [178, 165, 196]),
                                    ('性别',['男','女','男']),
                                    ('出生地',['深圳','上海','北京'])                                  
                                   ])
                             )

df19

Имена полей индекса строки и столбца также можно указать с помощью параметров:

df20 = pd.DataFrame.from_dict(dict([('姓名', ['小明', '小红', '小周']), 
                                    ('身高', [178, 165, 196]),
                                    ('性别',['男','女','男']),
                                    ('出生地',['深圳','上海','北京'])                                  
                                   ]),
                              orient='index',   # 将字典的键作为行索引
                              columns=['one', 'two', 'three']  # 指定列字段名称
                             )

df20

Используйте конструктор from_records

В pandas есть еще один поддерживаемый список кортежей или тип данных struct (dtype) построитель многомерных массивов: from_records

data3 = [{'身高': 173, '姓名': '张三','性别':'男'},
        {'身高': 182, '姓名': '李四','性别':'男'},
        {'身高': 165, '姓名': '王五','性别':'女'},
        {'身高': 170, '姓名': '小明','性别':'女'}]

df21 = pd.DataFrame.from_records(data3)

df21

Вы также можете передавать структурированные данные вложенных кортежей в список:

data4 = [(173, '小明', '男'), 
         (182, '小红', '女'), 
         (161, '小周', '女'), 
         (170, '小强', '男')
        ]

df22 = pd.DataFrame.from_records(data4, 
                                 columns=['身高', '姓名', '性别']
                                )

df22

Суммировать

DataFrame — это двумерная структура данных в pandas, то есть данные расположены в табличной форме строк и столбцов, подобно таблицам Excel, SQL или словарю объектов Series. Он часто используется в pandas и сам по себе представляет собой комбинацию данных нескольких типов Series.

В этой статье представлены различные способы создания DataFrame 10. Наиболее распространенным является создание DataFrame путем чтения файла, а затем обработка и анализ DataFrame. Я надеюсь, что эта статья поможет читателям и друзьям освоить создание DataFrame.

Предварительный просмотр следующей статьи: Как найти данные в DataFrame, отвечающие нашим потребностям?