数学建模之Python操作csv文件
1.用Python通过csv文件里面的某一列,形成键值,然后统计键在其他列出现的次数。
import pandas as pd
import numpy as np
import csv
import codecs
import sys
data_original = pd.read_csv('D:/csv_data_original.csv')
data = pd.read_csv('D:/week1.csv')
#data = data['retweeted_status_mid'].fillna('NOT PROVIDED',inplace=True)
#data_transpond = data[data['retweeted_status_mid'] != 'NOT PROVIDED']
#每条原创微博转发次数统计
def statistics(path1,path2):
num1 = 0
num2 = 0
#这块代码用来形成键值,初始化为0
with open(path2, 'r', encoding="iso-8859-1") as f:
reader2 = csv.reader(f)
data_head2 = next(reader2)
print(data_head2)
data_line = next(reader2)
while(data_line):
if data_line[0] not in mid.keys():
mid[data_line[0].encode("iso-8859-1").decode("gbk", "ignore")] = 0
num2 += 1
print("正在创建第" + str(num2) + "个键")
try:
data_line = next(reader2)
except StopIteration:
print("数据处理完毕,键值完全形成" + str(num2) + "!")
break
#sys.exit()
f.close()
#这块代码用来统计每个键出现的次数
with open(path1, 'r', encoding="iso-8859-1") as f:
reader1 = csv.reader(f)
data_head1 = next(reader1)
print(data_head1)
data_line = next(reader1)
while(data_line):
if data_line[1] in mid.keys():
mid[data_line[1].encode("iso-8859-1").decode("gbk", "ignore")] += 1
print("这条微博被转发" + str(mid[data_line[1]]) + "次")
try:
data_line = next(reader1)
except StopIteration:
print("数据处理完毕,转发次数统计完毕")
break
#sys.exit()
f.close()
#字典转化为列表
def transpond(dict):
global list_key#保存键
global list_value#保存值
list_key = list(dict)
list_value = list(dict.values())
#将数据写入csv文件
def data_write_csv(file_name, list1,list2):#file_name为写入CSV文件的路径,datas为要写入数据列表
with open(file_name,'w',newline='') as f:
writer = csv.writer(f)
writer.writerows(zip(list1, list2))
if __name__ == "__main__":
path_data = 'D:/week1.csv' # 原始数据路径
path_data_original = 'D:/csv_data_original.csv' # 处理后只含原创的微博数据路径
path_save = 'D:/transpond_data.csv' # 保存处理后的数据
mid = {} # 定义字典用来保存每条原创微博被转发的次数
list_key = [] # 保存键
list_value = [] # 保存值
statistics(path_data,path_data_original)
transpond(mid)
data_write_csv(path_save,list_key,list_value)
2.与1类似的操作,具体有一些细节变动,代码中有注释
import csv
import pandas as pd
#每条原创微博转发次数统计
def statistics(path1,path2):
num2 = 0
#这块代码用来形成键值,初始化为0
with open(path2, 'r', encoding="iso-8859-1") as f:
reader2 = csv.reader(f)
data_head2 = next(reader2)
print(data_head2)
data_line = next(reader2)
while(data_line):
if data_line[0] not in mid.keys():
mid[data_line[0].encode("iso-8859-1").decode("gbk", "ignore")] = 0
num2 += 1
print("正在创建第" + str(num2) + "个键")
try:
data_line = next(reader2)
except StopIteration:
print("数据处理完毕,键值完全形成" + str(num2) + "!")
break
#sys.exit()
f.close()
#这块代码用来统计每个键出现的次数
with open(path1, 'r', encoding="iso-8859-1") as f:
reader1 = csv.reader(f)
data_head1 = next(reader1)
print(data_head1)
data_line = next(reader1)
while(data_line):
if data_line[2] in mid.keys():
mid[data_line[2].encode("iso-8859-1").decode("gbk", "ignore")] += int(data_line[1])
print("这个用户的微博被转发一共" + str(mid[data_line[2]]) + "次")
try:
data_line = next(reader1)
except StopIteration:
print("数据处理完毕,转发次数统计完毕")
break
#sys.exit()
f.close()
#字典转化为列表
def transpond(dict):
global list_key#保存键
global list_value#保存值
list_key = list(dict)
list_value = list(dict.values())
#将数据写入csv文件
def data_write_csv(file_name, list1,list2):#file_name为写入CSV文件的路径,datas为要写入数据列表
with open(file_name,'w',newline='') as f:
writer = csv.writer(f)
writer.writerows(zip(list1, list2))
if __name__ == '__main__':
path1 = 'D:/csv_data_original_num.csv' # 用来形成键的数据路径
path2 = 'D:/data_all.csv' # 用来查找键值的数据路径
path_save = 'D:/user_transpond.csv' # 存放统计好的数据路径
mid = {}
list_key = []
list_value = []
statistics(path2,path1)
transpond(mid)
data_write_csv(path_save,list_key,list_value)
3.将大数据的csv文件根据特定条件分成几份小文件
#coding = utf-8
import pandas as pd
import csv
def get_txt(path1,path2,path3,path4,path5,path6,path7,path8):
num = 0
with open(path1, 'r',encoding = 'utf-8') as f:
txt1 = open(path2, "w", encoding='utf-8')
txt2 = open(path3, "w", encoding='utf-8')
txt3 = open(path4, "w", encoding='utf-8')
txt4 = open(path5, "w", encoding='utf-8')
txt5 = open(path6, "w", encoding='utf-8')
txt6 = open(path7, "w", encoding='utf-8')
txt7 = open(path8, "w", encoding='utf-8')
reader1 = csv.reader(f)
data_head1 = next(reader1)
print(data_head1)
data_line = next(reader1)
while(data_line):
num += 1
print(num)
print(data_line[6])
if num > 0 and num < 700000:
txt1.write(data_line[6] + '\n')
elif num >= 700000 and num < 1400000:
txt2.write(data_line[6] + '\n')
elif num >= 1400000 and num < 2100000:
txt3.write(data_line[6] + '\n')
elif num >= 2100000 and num < 2800000:
txt4.write(data_line[6] + '\n')
elif num >= 2800000 and num < 3500000:
txt5.write(data_line[6] + '\n')
elif num >= 3500000 and num < 4200000:
txt6.write(data_line[6] + '\n')
elif num >= 4200000 and num < 4700000:
txt7.write(data_line[6] + '\n')
try:
data_line = next(reader1)
except StopIteration:
print("数据处理完毕,转发次数统计完毕")
break
#sys.exit()
f.close()
if __name__ == '__main__':
path1 = 'D:/week1.csv'
path2 = 'D:/text1.txt'
path3 = 'D:/text2.txt'
path4 = 'D:/text3.txt'
path5 = 'D:/text4.txt'
path6 = 'D:/text5.txt'
path7 = 'D:/text6.txt'
path8 = 'D:/text7.txt'
get_txt(path1,path2,path3,path4,path5,path6,path7,path8)
数学建模之Python操作csv文件的更多相关文章
- Python操作csv文件
1.什么是csv文件 The so-called CSV (Comma Separated Values) format is the most common import and export fo ...
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...
- Python对csv文件的读写操作
python内置了csv模块,用它可以方便的操作csv文件. 1.写文件 (1)写文件的方法一 import csv # open 打开文件有多种模式,下面是常见的4种 # r:读数据,默认模式 # ...
- python中操作csv文件
python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...
- python操作csv和excel文件
1.操作csv文件 1).读取文件 import csv f=open("test.csv",'r') t_text=csv.reader(f) for t,i in t_text ...
- Python处理csv文件
Python处理csv文件 CSV(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看.由于是纯文本,任何编辑器也都可打开.与Excel文件不同,CSV文件中: 值没 ...
- 使用Python读写csv文件的三种方法
Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...
- python读写csv文件
文章链接:https://www.cnblogs.com/cloud-ken/p/8432999.html Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗 ...
- python操作txt文件中数据教程[4]-python去掉txt文件行尾换行
python操作txt文件中数据教程[4]-python去掉txt文件行尾换行 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文章 python操作txt文件中数据教程[1]-使用pyt ...
随机推荐
- XMLHttpRequest原生方法
时间久了,在工作中会有很多方法和见解. 随着时间的推移,慢慢的写的代码越来越多,封装分方法也越来越多,为的是方便后续工作,加快开发效率! 与此同时,我们会相应的去找一些插件,来代替我们在开发过程中执行 ...
- ArrayList 源码分析 基于jdk1.8:
1:数据结构: transient Object[] elementData; //说明内部维护的数据结构是一个Object[] 数组 成员属性: private static final int ...
- HDU 5047 Sawtooth 找规律+拆分乘
Sawtooth Think about a plane: ● One straight line can divide a plane into two regions. ● Two lines ...
- 在Mac 上搭建Linux虚拟机--MacOS & VMware10 & CentOS 7
在大型项目开发中, 需要使用Linux下的C语言对工程进行开发, 在个人PC或者工作站上搭建Linux系统十分容易且方便. 本篇文章将介绍操作系统和虚拟机的搭建: 1 操作系统2 虚拟机概念3 Lin ...
- Web应急:搜索引擎劫持
当你直接打开网址访问网站,是正常的,可是当你在搜索引擎结果页中打开网站时,会跳转到一些其他网站,比如博彩,虚假广告,淘宝搜索页面等.是的,你可能了遇到搜索引擎劫持. 现象描述 从搜索引擎来的流量自动跳 ...
- 【开发笔记】- grails框架中在使用domain的save方法保存时保存不成功
1.如果报错,自行根据异常查找错误,这里不说明 2.如果为报错,我遇到的就是domain中的字段属性与数据库中为同步 (1)你的domain是新的,在增加新的字段属性时未使用update更新数据库,造 ...
- EHLIB 安装方法
Ehlib安装方法 路人甲 2010-05-05 23:01:37 安装文件自带的Readme.txt中的安装过程如下: 1. Delphi 5.x - 7.x, Delphi 9.X Win32, ...
- js中数组的迭代方法
1.forEach 让数组的每一项做一件事 var arr = [1,2,3,4,5] arr.forEach(function(item,index){ console.log(item) }) 2 ...
- android studio学习----添加项目依赖包总结
Gradle Library Projects Gradle 项目可以依赖于其它组件.这些组件可以是外部二进制包,或者是其它的 Gradle 项目. 在本例中, app/build.gradle 中有 ...
- 开源一些C#不常用知识(附上DEMO)
序:这其实是一个广告贴. 正文:开源一些不常用的C#DEMO,这个是专门写成DEMO的样子,来供大家查阅,当然可以提出意见啥的.或者一些需要加入的DEMO,作者可以添加上. git地址:https:/ ...