從wind上面搞到一批股票數(shù)據(jù)后發(fā)現(xiàn):本來(lái)是一個(gè)類(lèi)型的數(shù)據(jù),但是由于季度不同,列名也不同,導(dǎo)致使用pandas合并多個(gè)報(bào)表的時(shí)候總是出現(xiàn)一大堆NaN,所以這里我寫(xiě)了一個(gè)函數(shù),專(zhuān)門(mén)針對(duì)這樣的表
它的思路是:
生成一堆單詞,然后把這些表的列索引全部替換為這些單詞,然后調(diào)用 pd.concat() 把這些dataframe全部合并后再把列索引改回來(lái),當(dāng)然,這里也可以手動(dòng)指定列索引。
使用方法見(jiàn)代碼的最后一行,傳入一個(gè)dataframe的list就可以了。
import pandas as pd
from random import Random
# 隨機(jī)生成一堆單詞作為公共的列名
def random_list(random_str_count, randomlengtd=6):
result_list = []
random = Random()
chars = "qwertyuiopasdfghjklzxcvbnm"
for str_count in range(random_str_count):
ranstr = ""
lengtd = len(chars) - 1
for str_lengtd in range(randomlengtd):
ranstr += chars[random.randint(0, lengtd)]
result_list.append(ranstr)
return result_list
def combine_as_data_location(pd_list, columns=''):
if not pd_list:
return None
old_columns = pd_list[0].columns
if columns:
new_columns = columns
else:
new_columns = random_list(pd_list[0].shape[1])
for data_df in pd_list:
# data is pandas Dataframe
data_df.columns = new_columns
result_df = pd.concat(pd_list, ignore_index=True)
if columns:
return result_df
else:
result_df.columns = old_columns
return result_df
result_df = combine_as_data_location([df1,df2,df3])
補(bǔ)充:pandas.concat實(shí)現(xiàn)豎著拼接、橫著拼接DataFrame
1、concat豎著拼接(默認(rèn)的豎著,axis=0)
話不多說(shuō),直接看例子:
import pandas as pd
df1=pd.DataFrame([10,12,13])
df2=pd.DataFrame([22,33,44,55])
df3=pd.DataFrame([90,94])
df1
df2
df3
res= pd.concat([df1,df2,df3])
res
|
0 |
0 |
10 |
1 |
12 |
2 |
13 |
0 |
22 |
1 |
33 |
2 |
44 |
3 |
55 |
0 |
90 |
1 |
94 |
如果要生成新索引,忽略原來(lái)索引怎么辦?
默認(rèn)有個(gè)參數(shù)ignore_index= False,將其值改為T(mén)rue:
res2= pd.concat([df1,df2,df3], ignore_index=True)
res2
|
0 |
0 |
10 |
1 |
12 |
2 |
13 |
3 |
22 |
4 |
33 |
5 |
44 |
6 |
55 |
7 |
90 |
8 |
94 |
2、concat橫著拼接
用參數(shù)axis= 1,看例子:
res_heng= pd.concat([df1,df2,df3], axis=1)
res_heng
|
0 |
0 |
0 |
0 |
10.0 |
22 |
90.0 |
1 |
12.0 |
33 |
94.0 |
2 |
13.0 |
44 |
NaN |
3 |
NaN |
55 |
NaN |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- Pandas實(shí)現(xiàn)Dataframe的重排和旋轉(zhuǎn)
- Pandas實(shí)現(xiàn)Dataframe的合并
- pandas中DataFrame數(shù)據(jù)合并連接(merge、join、concat)
- 教你漂亮打印Pandas DataFrames和Series
- pandas中DataFrame檢測(cè)重復(fù)值的實(shí)現(xiàn)
- Pandas.DataFrame轉(zhuǎn)置的實(shí)現(xiàn)
- Pandas中DataFrame交換列順序的方法實(shí)現(xiàn)
- 詳解pandas中利用DataFrame對(duì)象的.loc[]、.iloc[]方法抽取數(shù)據(jù)
- Pandas中兩個(gè)dataframe的交集和差集的示例代碼
- Pandas DataFrame求差集的示例代碼
- 淺談pandas dataframe對(duì)除數(shù)是零的處理
- Pandas中DataFrame數(shù)據(jù)刪除詳情