现有数据为这
1,2,11,"MiWiFi-R4AC|百兆双频|小米|R4AC|小米,FW325R|百兆单频|迅捷|FW325R|迅捷,device_12|百兆单频|MERCURY|device_12|MERCURY,FIR302C|百兆单频|斐讯|FIR302C|斐讯,TL-WR886N|百兆单频|TPLINK|TL-WR886N|TPLINK,TL-WR890N|百兆单频|TPLINK|TL-WR890N|TPLINK,MW310R|百兆双频|水星|MW310R|水星,TL-WDR5620|百兆双频|TP-LINK|TL-WDR5620|TP-LINK,MW313R|百兆双频|水星|MW313R|水星,TL-WR842N|百兆单频|TPLINK|TL-WR842N|TPLINK,MiWiFi-R4CM|百兆单频|小米|小米4C|小米,MW325R|百兆单频|水星|MW325R|水星,MW155R|百兆双频|水星|MW155R|水星,MW150R|百兆双频|水星|MW150R|水星"
需要将后半部分,全部拆分成列。首先读取文件,由于文件比较大。
tempData=pd.read_csv(filName,low_memory=False,compression='gzip')
读取压缩文件,至于为什么加low_memory=False 后面了再说。
先确定文件列名称:
读取完之后 至于分多少列 文件中第三个字段是有多少组数据,
那么 截取三个字段的值
maxColumns=tenpData.iloc[0,2]
按照文件具体名称生成文件列名称
strChar=u"路由器"
strSourceColumn=u"名称,类型,品牌,型号,厂家"
coloumnlist=strSourceColumn.split(",");
for i in range(int(maxColumns)):
for indexColumn in coloumnlist:
strTemp=strChar+str(i+1)+indexColumn+","
strColumn+=strTemp
strColumn=strColumn[:-1]
new_names = strColumn.split(",");
因为这部分是一个整体,每一组用逗号分割,每组之间用|分割因此
tenpData['Info1']=tenpData['Info'].str.replace("|",",")
newTenpData = tenpData['Info1'].str.split(',', expand=True)
newTenpData.columns = new_names
tenpData = newTenpData.join(newSubdevicesData)
#删除多余的行
tenpData.drop(['Info'],axis=1,inplace=True)
tenpData.drop(['Info1'],axis=1,inplace=True)
现在基本就处理完了
常用一些操作
筛选数据
tempData=tempALLData.loc[(tempALLData["A"] == "3")]
数据按照莫格字段排序
tempData=tempData.sort_values(by='C',ascending=False)
用到了sort_values函数,by参数可以指定根据哪一列数据进行排序,ascending是设置升序和降序(选择多列或者多行排序要加[ ],把选择的行列转换为列表,排序方式也可以同样的操作)
pandas 导出压缩文件
tempData.to_csv(exportFile, encoding='utf_8_sig', sep=',', index=False, header=True,compression='gzip')
encoding='utf_8_sig' 导出的utf8 格式直接打开乱码,所以需要设置为 utf_8_sig这样 导出直接打开正常,主要是windows 下面直接打开。
compression:字符串,可选的
a字符串,表示要在输出文件中使用的压缩,允许的值为'gzip','bz2','xz',仅在第一个
参数为文件名时使用
在读取文件的时候会报错:
sys:1: DtypeWarning: Columns (24) have mixed types. Specify dtype option on import or set low_memory=False.”
pd = pd.read_csv(Your_path, low_memory=False)
low_memory=False 添加此选项。
low_memory : boolean, default True
# 分块加载到内存,再低内存消耗中解析,但是可能出现类型混淆。
# 确保类型不被混淆需要设置为False,或者使用dtype 参数指定类型。
# 注意使用chunksize 或者iterator 参数分块读入会将整个文件读入到一个Dataframe,而忽略类型(只能在C解析器中有效)