導入所需的包
import
os
import
pandas
as
pd
import
glob
合并多個csv文件
csv_list = glob.glob(
'*.csv'
)
#查看同文件夾下的csv文件數
print(
u'共發現%s個CSV文件'
% len(csv_list))
print(
u'正在處理............'
)
for
i
in
csv_list:
#循環讀取同文件夾下的csv文件
fr = open(i,
'rb'
).read()
with
open(
'result.csv'
,
'ab'
)
as
f:
#將結果保存為result.csv
f.write(fr)
print(
u'合并完畢!'
)
共發現9個CSV文件
正在處理............
合并完畢!
去重函數
這個函數將重復的內容去掉,主要是去表頭。
df = pd.read_csv(
"result.csv"
,header=
0
)
df.info()
RangeIndex: 659867 entries, 0 to 659866
Data columns (total 3 columns):
UrbanRuralCode 659867 non-null object
code 659867 non-null object
name 659867 non-null object
dtypes: object(3)
memory usage: 15.1+ MB
IsDuplicated = df.duplicated()
True
in
IsDuplicated
True
這說明了這個DataFrame格式的數據含有重復項。
DataFrame.drop_duplicates函數的使用
DataFrame.drop_duplicates(subset=
None
, keep=
'first'
, inplace=
False
)
-
subset : column label or sequence of labels, optional
用來指定特定的列,默認所有列 -
keep : {‘first’, ‘last’, False}, default ‘first’
刪除重復項并保留第一次出現的項 -
inplace : boolean, default False
是直接在原來數據上修改還是保留一個副本
datalist = df.drop_duplicates(keep =
False
)
datalist.info()
Int64Index: 659859 entries, 0 to 659866
Data columns (total 3 columns):
UrbanRuralCode 659859 non-null object
code 659859 non-null object
name 659859 non-null object
dtypes: object(3)
memory usage: 20.1+ MB
排序函數
datalist_sorted = datalist.sort_values(by = [
'code'
])
#按1列進行升序排序
結果寫入csv文件
datalist_sorted.to_csv(
"village_all.csv"
, sep =
','
, header =
True
,index =
False
)
問題
Python讀取文件問題
錯誤信息
"UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multibyte sequence"
解決方案
fr = open(i,
'r'
).read() 改為 fr = open(i,
'rb'
).read()
with
open(
'result.csv'
,
'a'
)
as
f: 改為
with
open(
'result.csv'
,
'ab'
)
as
f:
重復值問題
這里我合并了9個csv文件,檢查最后合并結果發現,里面還有 一個列名 。這是因為9個為文件,其中8個的列名被認為是DataFrame的值,第1個的列名依舊為列名,然后再去重的過程中,8個相同值被保留了1個,所以這會導致最后的csv文件多了 一個列名 。
解決方案
IsDuplicated = df.duplicated() 改為 IsDuplicated = df.duplicated(keep =
False
)
#重復數據全部去除
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
