我有一個熊貓DF,看起來像這樣:Python的大熊貓 - 合併兩列的數據幀
TTL1 TTL2
0 val1
1 val2
2 val3
3 val4
4 val5
5 val6
6 val7
7 val8
,我想讓它像這樣:
TTL1
0 val1
1 val2
2 val3
3 val4
4 val5
5 val6
6 val7
7 val8
任何想法如何取悅我可以做到這一點?
我有一個熊貓DF,看起來像這樣:Python的大熊貓 - 合併兩列的數據幀
TTL1 TTL2
0 val1
1 val2
2 val3
3 val4
4 val5
5 val6
6 val7
7 val8
,我想讓它像這樣:
TTL1
0 val1
1 val2
2 val3
3 val4
4 val5
5 val6
6 val7
7 val8
任何想法如何取悅我可以做到這一點?
條件設置如何?
In [260]: df.loc[df.TTL1 == '', 'TTL1'] = df.TTL2
In [261]: df
Out[261]:
TTL1 TTL2
0 val1
1 val2
2 val3
3 val4 val4
4 val5
5 val6
6 val7
7 val8 val8
備選地,使用np.where
In [266]: df.TTL1 = np.where(df.TTL1 == '', df.TTL2, df.TTL1)
In [267]: df
Out[267]:
TTL1 TTL2
0 val1
1 val2
2 val3
3 val4 val4
4 val5
5 val6
6 val7
7 val8 val8
如果這些是空白,肯定會更直接。 – piRSquared
SET_UP
df = pd.DataFrame([
['val1', np.nan],
['val2', np.nan],
['val3', np.nan],
[np.nan, 'val4'],
['val5', np.nan],
['val6', np.nan],
['val7', np.nan],
[np.nan, 'val8']
], columns=['TTL1', 'TTL2'])
最簡單的答案是使用combine_first
df.TTL1.combine_first(df.TTL2).to_frame()
TTL1
0 val1
1 val2
2 val3
3 val4
4 val5
5 val6
6 val7
7 val8
如果這些空白實際上是''
然後做這第一個
df.replace('', np.nan, inplace=True)
這不起作用。也許是因爲我在TTL2之後有更多列? – TheDaJon
它適合我。這意味着在運行的和我正在運行的程序之間有一些不明顯的區別。這可能是庫版本(懷疑它),或數據差異(可能),或用戶錯誤(你的或我的)。提出問題的最佳方式是提供創建數據的代碼片段。這樣,我們正在處理的數據集幾乎沒有含糊不清的地方。我會用一個例子更新我的文章。 – piRSquared
又一溶液(假定OP具有在TTL1
柱NaN
的):
In [127]: df.TTL1.fillna(df.TTL2)
Out[127]:
0 val1
1 val2
2 val3
3 val4
4 val5
5 val6
6 val7
7 val8
Name: TTL1, dtype: object
有一個在一個位模糊問題,但熊貓方法stack
是用來把所有的價值觀放在一個單一的公司lumn。
df.stack()
輸出
0 TTL1 val1
1 TTL1 val2
2 TTL1 val3
3 TTL2 val4
4 TTL1 val5
5 TTL1 val6
6 TTL1 val7
7 TTL2 val8
dtype: object
你有'NaN'的或' '''(空字符串)在'TTL1'列? – MaxU