Python Pandas-在数据帧中合并两列
我有一个熊猫df,看起来像这样:Python Pandas-在数据帧中合并两列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫df,看起来像这样: 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
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 = 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\u
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)
设置
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\u
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)
条件设置如何
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
条件设置如何
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
另一种解决方案(假设OP在TTL1
列中有NaN
):
另一种解决方案(假设OP在TTL1
列中有NaN
):
这个问题有点模棱两可,但是熊猫方法
stack
用于将所有值放入一列中
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
这个问题有点模棱两可,但是熊猫方法
stack
用于将所有值放入一列中
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
这不管用。也许是因为在TTL2之后我有更多的专栏?这对我很有用。这意味着在你正在运行的和我正在运行的之间存在一些不明显的差异。这可能是库版本(怀疑),或数据差异(可能),或用户错误(你的或我的)。提问的最佳方式是提供一段创建数据的代码。通过这种方式,对于我们正在处理的数据集几乎没有歧义。我将用一个例子更新我的帖子。这不起作用。也许是因为在TTL2之后我有更多的专栏?这对我很有用。这意味着在你正在运行的和我正在运行的之间存在一些不明显的差异。这可能是库版本(怀疑),或数据差异(可能),或用户错误(你的或我的)。提问的最佳方式是提供一段创建数据的代码。通过这种方式,对于我们正在处理的数据集几乎没有歧义。我会用一个例子更新我的帖子。如果那些是空白的话,肯定会更直接。如果那些是空白的话,肯定会更直接。你在
TTL1
列中有NaN
或TTL1
列中有NaN
(空字符串)吗?