import csv import pandas as pd with open('学生信息表.csv', 'r') as f: reader = csv.reader(f) for row in reader: print([cell.replace(',', '') for cell in row]) new_data = ['17010002', '赵四', '女', '自动化1701'] df = pd.read_csv('学生信息表.csv') df.loc[df.shape[0]] = new_data df.to_csv('学生信息表.csv', index=False)代码改进
时间: 2023-08-21 14:05:08 浏览: 129
对于这段代码,可以进行以下的改进:
1. 使用with语句打开文件,可以在文件使用完毕后自动关闭文件,不需要手动调用f.close()方法。
2. 在读取CSV文件时,可以将csv.reader()返回的对象直接传给pd.DataFrame()方法,以构建DataFrame对象。
3. 在添加新数据时,可以使用pd.Series()方法构建一个新的Series对象,并将其添加到DataFrame对象中。
4. 在写入CSV文件时,可以使用mode='a'参数将数据追加到文件末尾,而不是覆盖原有数据。
综上所述,改进后的代码如下所示:
```python
import pandas as pd
# 读取CSV文件并输出数据
with open('学生信息表.csv', 'r') as f:
df = pd.DataFrame(csv.reader(f))
print(df)
# 添加新数据并写入CSV文件
new_data = pd.Series(['17010002', '赵四', '女', '自动化1701'])
df = df.append(new_data, ignore_index=True)
df.to_csv('学生信息表.csv', mode='a', header=False, index=False)
```
其中,ignore_index=True参数用于忽略添加新数据时的索引,header=False参数用于不写入列名。
相关问题
import matplotlib.pyplot as plt import pandas as pd import csv '''plt.rcParams['font.sans-serif']=['Microsoft YaHei'] plt.axes(aspect='equal')''' data = pd.read_csv("./no1-1000.csv",encoding = 'gbk') for i in range(1,10): n=i*100+i data.drop([n],inplace=True) data.reset_index(drop=True) with open('./no1-1000.csv','rt') as f: reader=csv.reader(f) header_row=next(reader) for index,column_header in enumerate(header_row): print(index,column_header)我通过以上代码获得了CSV文件的索引,请问如何根据索引统计某列数据出现的频次,来绘制饼图
可以使用 pandas 库中的 value_counts() 方法来统计某列数据出现的频次,然后使用 matplotlib 库中的 pie() 方法来绘制饼图。
以下是代码示例:
```
import matplotlib.pyplot as plt
import pandas as pd
import csv
# 读取 CSV 文件
data = pd.read_csv("./no1-1000.csv", encoding='gbk')
# 删除特定行
for i in range(1, 10):
n = i * 100 + i
data.drop([n], inplace=True)
# 重置索引
data.reset_index(drop=True)
# 统计某列数据出现的频次
freq = data['某列数据'].value_counts()
# 绘制饼图
plt.figure(figsize=(8, 8)) # 设置图形大小
plt.pie(freq.values, labels=freq.index, autopct='%1.1f%%') # 绘制饼图
plt.title("某列数据出现频次饼图") # 设置图形标题
plt.show() # 显示图形
```
其中,`'某列数据'` 需要替换成你要统计频次的列的列名。
import csv import os import pandas as pd # 源文件夹路径 source_folder = "E:/lexin/output" # 新csv文件夹路径 output_folder = "E:/lexin/output2" # 获取源文件夹中的所有csv文件 csv_files = [f for f in os.listdir(source_folder) if f.endswith('.csv')] # 创建新的csv文件 output_files = [] with open(os.path.join(output_folder, "output.csv"), 'w') as output_file: output_files.append(csv.writer(output_file)) for i in range(1, len(csv_files)): output_file_path = os.path.join(output_folder, f"output{i}.csv") with open(output_file_path, 'w') as new_output_file: output_files.append(csv.writer(new_output_file)) # 遍历每个csv文件 for csv_file in csv_files: with open(os.path.join(source_folder, csv_file), 'r') as f: reader = csv.reader(f) # 遍历每行数据 for i, row in enumerate(reader): # 将第i行写入对应的新csv文件 with open(os.path.join(output_folder, f"output{i}.csv"), 'a', newline='') as out_file:#newline=''作用:避免出现空行。 writer = csv.writer(out_file) writer.writerow(row)运行这段代码,要想将输出的csv文件以文件中第5第6列第一行数据为文件名,怎么修改
可以按照如下方式修改代码,以第5列和第6列的数据为文件名:
```
import csv
import os
import pandas as pd
# 源文件夹路径
source_folder = "E:/lexin/output"
# 新csv文件夹路径
output_folder = "E:/lexin/output2"
# 获取源文件夹中的所有csv文件
csv_files = [f for f in os.listdir(source_folder) if f.endswith('.csv')]
# 遍历每个csv文件
for csv_file in csv_files:
with open(os.path.join(source_folder, csv_file), 'r') as f:
reader = csv.reader(f)
# 获取第5列和第6列的数据作为文件名
file_name = f"{reader[0][4]}_{reader[0][5]}.csv"
output_file_path = os.path.join(output_folder, file_name)
# 将第一个csv文件的数据写入新的csv文件
if csv_file == csv_files[0]:
with open(output_file_path, 'w', newline='') as output_file:
writer = csv.writer(output_file)
for row in reader:
writer.writerow(row)
# 将其他csv文件的数据追加到对应的新csv文件中
else:
with open(output_file_path, 'a', newline='') as output_file:
writer = csv.writer(output_file)
for row in reader:
writer.writerow(row)
```
在上述代码中,我们首先遍历每个csv文件,然后获取第5列和第6列的数据作为新csv文件的文件名。接着,我们判断当前csv文件是否为第一个csv文件,是的话就创建一个新的csv文件,并将第一个csv文件的数据写入其中;否则,我们打开对应的新csv文件,并将当前csv文件的数据追加到其中。
注意,在使用 `csv.reader()` 函数时,我们需要先读取第一行数据,即 `reader[0]`,才能获取第5列和第6列的数据。同时,在打开新csv文件时,需要设置 `newline=''`,避免出现空行。
阅读全文