pandas 列拆分多列

现有数据为这

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解析器中有效)

 

 

 

 

 

 

你可能感兴趣的:(python)