23.5.16 使用pandas处理数据表格

文章详细介绍了如何使用Pandas库操作dataframe,包括查看数据信息、删除行或列、处理缺失值、数据切片与分组、保存为Excel文件以及进行独热编码和数据归一化等预处理步骤,这些都是数据科学和机器学习项目中常见的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 1、快速查看dataframe数据信息

2、对dataframe数据进行操作 

1、删除指定行或列

2.删除含空值(缺失值)的行或列

3、dataframe数据切片、分组

4、dataframe数据保存为excel文件

一个dataframe数据保存到一个excel文件的一个表中:

多个dataframe数据保存到一个excel文件的不同表中:

5、独热编码:

6、归一化


 1、快速查看dataframe数据信息

data = pd.read_excel('temper.xlsx')  #读取excel文件数据到data
df = pd.DataFrame(data)   #将data中的数据转变成DataFrame数据结构
#注:在进行人工智能机器学习时必须转换成ndarray数据结构
print(data.shape)     #查看数据结构
print(data.head())    #查看前5行数据
print(data.tail(3))   #查看后3行数据
print(data.index)    #查看行索引名
print(data.columns)  #查看列名
df['day'] = df['avg']   #复制一列数据
del df['day']         #删除一列数据
df['day'] = da['day'].shift(-1)  #-1表示向将day列数据上移动1格,2表示向下移动2格

2、对dataframe数据进行操作 

1、删除指定行或列

DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)

 参数含义:

  • labels:要删除的行或列,用列表给出
  • axis:默认为0,指要删除的是行,删除列时需指定axis为1
  • index :直接指定要删除的行,删除多行可以使用列表作为参数
  • columns:直接指定要删除的列,删除多列可以使用列表作为参数
  • inplace: 默认为False,该删除操作不改变原数据;inplace = True时,改变原数据

1.2、总结

  1. 通过参数labels和axis 来指定
  2. 通过参数index或者columns来指定

原文链接:https://blog.youkuaiyun.com/m0_45210226/article/details/108942015

2.删除含空值(缺失值)的行或列

df.dropna()   # 删除包含缺失值的行或列
df.fillna(0)  # 将缺失值替换为指定的值
df.replace('old_value', 'new_value')  # 将指定值替换为新值 
df.duplicated()  # 检查是否有重复的数据
df.drop_duplicates()  # 删除重复的数据

3、dataframe数据切片、分组

#去除空数据之数据切片
new_df = df[0:56]  
new_df = df[0:-2]
#使用groupby分组
df_sex = df.groupby('sex') #将性别列中男女分类成两个表格
print(df_sex.head(1))     #打印每组的第一行数据
df_boy = df[df['sex']=='男']  #将sex列中的男生分开出来

4、dataframe数据保存为excel文件

一个dataframe数据保存到一个excel文件的一个表中:

df_boy.to_excel('D:/python/保存的路径/保存的数据.xlsx') 
df_boy.to_excel('D:/python/保存的路径/保存的数据.xlsx',index=False)   #index为是否保存索引
df_boy.to_excel('D:/python/保存的路径/保存的数据.xlsx',sheet_name='工作表名字')  #sheet_name为修改工作表sheet的名称

多个dataframe数据保存到一个excel文件的不同表中:

with pd.ExcelWriter('D:/python/保存的路径/保存的数据.xlsx') as baocun
    df_boy.to_excel(baocun,sheet_name='第1个表')
    df_girl.to_excel(baocun,sheet_name='第2个表')

5、独热编码:

将dataframe数据中的字符串数据独热编码为可以使用来进行机器学习的数值

features = pd.get_dummies(features) #直接使用pandas的get_dummies进行独热编码

6、归一化

机器学习时,dataframe数据中每列的数值大小范围不一样(有的数值很小、几十,有的数值很大、几百),为了使数值预测的更准确,所以要进行归一化(即将所有数值都转化成[0,1]或者[-1,1]直间的数)

参考:

https://blog.youkuaiyun.com/weixin_43921949/article/details/126822034?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168423147216800227488799%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168423147216800227488799&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-126822034-null-null.142^v87^insert_down28v1,239^v2^insert_chatgpt&utm_term=%E5%BD%92%E4%B8%80%E5%8C%96&spm=1018.2226.3001.4187https://blog.youkuaiyun.com/weixin_43921949/article/details/126822034?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168423147216800227488799%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168423147216800227488799&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-126822034-null-null.142%5Ev87%5Einsert_down28v1,239%5Ev2%5Einsert_chatgpt&utm_term=%E5%BD%92%E4%B8%80%E5%8C%96&spm=1018.2226.3001.4187

<think>好的,我现在需要帮用户解决如何在Python中保存混合类型数据的问题。用户提到想找方法和最佳实践,特别是使用Python存储异构数据。首先,我需要回忆一下Python中常用的数据存储方法,以及它们各自适合的场景。 首先,混合类型的数据可能包括数字、字符串、列表、字典等多种类型。常见的方法可能有使用内置的数据结构如列表、字典,或者使用更结构化的方式比如CSV、JSON、Pickle、HDF5,或者数据库如SQLite。需要逐一分析这些方法的优缺点。 CSV文件适合表格数据,但每个单元格只能是字符串,处理复杂类型可能需要序列化。比如保存列表或字典到CSV时,可能需要转换成字符串,读取时再解析。但这样可能不够方便,容易出错,特别是如果数据嵌套复杂的话。 JSON格式支持多种基本类型和嵌套结构,比如字典、列表、字符串、数字等。但JSON的缺点是没法直接保存Python特有的对象,比如datetime或者自定义类,需要额外的处理。不过对于大多数混合类型的数据,JSON可能是一个不错的选择,尤其是可读性好的时候。 Pickle模块可以序列化几乎所有的Python对象,包括自定义类实例。但缺点是安全性问题,不能跨语言使用,且不同Python版本之间可能有兼容性问题。如果用户的数据中包含复杂的对象,Pickle可能合适,但需要提醒用户注意安全风险。 HDF5适合大型科学数据,支持高效存储和读取,但可能需要安装额外的库如h5py,并且数据结构需要组织成数组或数据集,可能不太适合高度异构的数据。 SQLite数据库作为嵌入式数据库,适合结构化或半结构化数据。可以创建表来存储不同类型的字段,支持查询和管理,但需要设计表结构,可能对于非常灵活的数据结构来说不够方便。 还有其他的比如Parquet格式,适合列式存储,但同样需要结构化数据。或者使用NoSQL数据库如MongoDB,但可能需要搭建服务器,对于本地存储可能不太方便。 最佳实践的话,可能需要根据数据的大小、结构复杂度、是否需要跨平台、可读性等因素来推荐。比如小规模、结构灵活的数据用JSON或Pickle;需要高效查询或结构化的用SQLite;大型数值数据用HDF5。 另外,用户可能需要处理如何将混合数据保存到这些格式中。例如,用JSON时,嵌套的字典和列表可以直接保存,但datetime对象需要转换成字符串。或者用Pickle直接保存整个数据结构,但牺牲可读性和安全性。 可能还需要提到一些库,比如pandas可以处理混合类型的数据帧,然后导出为多种格式。例如,DataFrame可以有不同的列类型,但每列内部类型需要一致。如果数据表格形式的,可能有用,但如果结构更复杂,可能不太适合。 现在需要组织这些思路,分点列出方法,并给出示例代码,同时指出优缺点和适用场景。可能的结构是: 1. 使用内置数据结构(列表/字典)与JSON 2. 使用Pickle序列化 3. 使用SQLite数据库 4. 使用HDF5文件 5. 使用CSV文件(带注意事项) 6. 使用Pandas DataFrame(如果有表格结构) 然后,每个方法给出示例代码,说明步骤,优缺点,适用场景。最后总结最佳实践,根据情况选择。 可能需要检查每种方法的代码是否正确,比如JSON的dump和load,Pickle的用法,SQLite的建表、插入和查询,HDF5的示例可能需要更详细的结构。比如在JSON中如何处理非基本类型,比如datetime,可能需要自定义编码器。 例如,使用JSON时: ```python import json from datetime import datetime data = { "name": "实验数据", "values": [1, 2.5, "text"], "timestamp": datetime.now() } # 自定义编码处理datetime class CustomEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): return obj.isoformat() return super().default(obj) with open("data.json", "w") as f: json.dump(data, f, cls=CustomEncoder) # 读取时解码 with open("data.json", "r") as f: loaded = json.load(f) loaded["timestamp"] = datetime.fromisoformat(loaded["timestamp"]) ``` 这样处理datetime对象,用户可能需要这样的自定义步骤。 对于SQLite,可能需要创建表,但混合类型的数据可能需要不同的列,或者存储为BLOB。如果数据结构不固定,可能需要使用schemaless的方式,比如存JSON字符串到某个字段,或者使用键值对表。例如: ```python import sqlite3 import json conn = sqlite3.connect('data.db') c = conn.cursor() c.execute('''CREATE TABLE IF NOT EXISTS records (id INTEGER PRIMARY KEY, data TEXT)''') data = { "name": "混合数据", "values": [3, 4.5, "更多文本"], "active": True } c.execute("INSERT INTO records (data) VALUES (?)", (json.dumps(data),)) conn.commit() # 查询 c.execute("SELECT data FROM records WHERE id=1") row = c.fetchone() loaded_data = json.loads(row[0]) ``` 这样在SQLite中存储为JSON字符串,结合了结构化和灵活性的优点。 对于Pickle的例子: ```python import pickle data = [1, "text", {"key": (3.14, False)}, [datetime.now()]] with open("data.pkl", "wb") as f: pickle.dump(data, f) with open("data.pkl", "rb") as f: loaded = pickle.load(f) ``` 但需要提醒用户不要加载不可信的pickle文件。 HDF5的例子可能需要使用h5py,但处理混合类型可能比较麻烦,因为HDF5更适合数组数据。例如: ```python import h5py import numpy as np with h5py.File('data.h5', 'w') as f: # 存储不同类型的数据集 f.create_dataset('integers', data=np.array([1, 2, 3])) f.create_dataset('strings', data=np.array(["a", "b"], dtype='S')) # 对于混合类型,可能需要用结构化数组或分开存储 ``` 不过这可能不太适合复杂的嵌套结构,所以HDF5可能不是最佳选择,除非数据主要是数值型的。 总结的话,最佳实践可能包括: - 根据数据结构和需求选择格式 - JSON适合可读性和跨语言,但需要处理非标准类型 - Pickle适合复杂Python对象,但注意安全 - SQLite适合需要查询和事务支持的场景 - 避免CSV处理复杂结构 - 使用Pandas如果数据表格形式,混合列类型 需要将这些整理成用户友好的回答,分点说明方法,示例代码,优缺点和应用场景。</think>在Python中保存混合类型数据时,可根据数据规模、结构复杂度及使用场景选择以下方法: --- ### 1. **使用JSON文件(适合嵌套结构)** 通过自定义编码器处理非标准类型(如`datetime`): ```python import json from datetime import datetime data = { "name": "传感器数据", "readings": [23.5, 18, "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值