一、csv,xls,xlsx文件的操作
1.读写操作
写入文件时最好加入index=False,避免索引被写入
python
#读取CSV
df_csv = pd.read_csv('data.csv', encoding='utf-8') # 有中文时可能需要调整编码
#写CSV
df_csv.to_csv('output.csv', index=False, encoding='utf-8')
#读取XLSX
df_xlsx = pd.read_excel('data.xlsx', engine='openpyxl') # 依赖openpyxl
#写XLSX
df_xlsx.to_excel('output.xlsx', index=False, engine='openpyxl')
#读取XLS
df_xls = pd.read_excel('data.xls', engine='xlrd') # 依赖xlrd
#写XLS
df_xls.to_excel('output.xls', index=False, engine='xlwt')
具体实操:
python
import pandas as pd
df = pd.DataFrame({
'学号': [1, 2, 3, 4],
'姓名': ['张三', '李四', '张三', '王五'],
'年龄': [18, 19, 21, 18]
})
# 读写csv
df1 = pd.read_csv('data.csv', encoding='gbk')
#打印文档
print(df1)
print("------------------")
#打印具体行
print(df1[df1['姓名']=="张三"])
# 将 Df1 保存为 CSV 文件
df1.to_csv('output.csv', index=False)
输出:

修改表格内容:
python
df1.loc[df1['姓名']=='张三','分数'] = 99
print(df1)

添加列:
python
df1['三评'] = None
print(df1)
添加行 :
python
new_row = pd.DataFrame({'姓名': ['赵六'], '分数': [85]}) #此处可多行
df1 = pd.concat([df1, new_row])
print(df1)
df1.loc[4] = [5,'王五', 79,32] #loc中的是索引号
print(df1)
写入:
python
df1.to_csv('output.csv',index=False) #index一定要False,不然索引也打印出来
二、json的格式转化
Python 对象 → JSON 字符串(dumps):
python
import json
data = {"name": "Alice", "age": 25, "isStudent": False}
json_str = json.dumps(data)
JSON 字符串 → Python 对象:
python
json_str = '{"name": "Bob", "age": 30, "isStudent": true}'
data = json.loads(json_str)
print(data["name"])

注意这是字符串的转换,不是文件的写入
从 JSON 文件读取为 Python 对象(load)
python
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
print(data)
Python 对象写入 JSON 文件(dump)
python
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
#ensure_ascii=False 让 JSON 文件里的中文正常显示,而不是变成 \uXXXX 这样的转义字符。
#indent=2 让 JSON 文件内容格式化缩进,方便阅读。
三、表的拼接操作
方法 描述 适合场景
merge() 按列名对齐,支持连接方式:inner、outer、left、right 数据库风格拼接,推荐
concat() 按列对齐合并多个 表,默认对齐索引 列数可能不一致、要保留所有数据
|----------|----------|
|axis=0
| 纵向拼接(默认) ||----------|----------------|
|axis=1
| 横向拼接(列对齐,索引为准) ||----------------|------------|
|join='outer'
| 并集拼接(补NaN) ||----------------|---------------|
|join='inner'
| 交集拼接(只保留共有索引) ||-------------------|--------|
|keys=['A', 'B']
| 增加层次列名 |
python
df1 = pd.DataFrame({
"学号": [1, 2, 3],
"姓名": ["张三", "李四", "王五"]
})
df2 = pd.DataFrame({
"学号": [1, 2, 3],
"分数": [85, 76, 90]
})
df2_conflict = pd.DataFrame({
"学号": [1, 2, 5],
"分数": [85, 76, 59],
"姓名": ["张三", "李四", "陈六"]
})
-
横向拼接(按列对齐)
交集拼接
python
#仅有一个相同的列名:学号
df_merge = pd.merge(df1, df2, on="学号", how='outer')
print(df_merge)
df_merge = pd.concat([df1, df2],axis=1,join='inner')
print(df_merge)

python
#有不止一个的相同列名:学号,姓名;如果直接拼接会出现冲突报错
#删除相同的列
df2_conflict_delete = df2_conflict.drop(columns=['姓名']) # 删除重复列
df_merge = pd.merge(df1, df2_conflict_delete, on='学号')
print(df_merge)
#重命名列名
df2_conflict_rename = df2_conflict.rename(columns={'姓名': '姓名_三评'})
df_merge = pd.merge(df1, df2_conflict_rename, on='学号')
print(df_merge)

2.纵向拼接(按行对齐)
有重复的列拼接后也会重复
python
df_a = pd.DataFrame({
"学号": [1, 2],
"姓名": ["张三", "李四"],
"分数": [85, 76]
})
df_b = pd.DataFrame({
"学号": [2,3, 4],
"姓名": ["李四","王五", "赵六"],
"分数": [76,90, 88]
})
df_concat = pd.concat([df_a, df_b], ignore_index=True)
print(df_concat)
