Python:删除dataframe列中的所有数据,并将最后一个值保留在第一行
假设我有一个简单的数据帧Python:删除dataframe列中的所有数据,并将最后一个值保留在第一行,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,假设我有一个简单的数据帧 import pandas as pd data1 = [12,34,'fsdf',678,'','','dfs','',''] df1 = pd.DataFrame(data1, columns= ['Data']) print(df1) Data 0 12 1 34 2 fsdf 3 678 4 5 6 dfs 7 8 我想删除所有数据,除了在第一行中要保留的列中找到的最后一个值。它可以是一个包含数千行的列。因此,我想知道结果:
import pandas as pd
data1 = [12,34,'fsdf',678,'','','dfs','','']
df1 = pd.DataFrame(data1, columns= ['Data'])
print(df1)
Data
0 12
1 34
2 fsdf
3 678
4
5
6 dfs
7
8
我想删除所有数据,除了在第一行中要保留的列中找到的最后一个值。它可以是一个包含数千行的列。因此,我想知道结果:
Data
0 dfs
1
2
3
4
5
6
7
8
我必须保持这个数据框的形状,所以不删除行
最简单的功能是什么
谢谢获取最后一个非空字符串值的索引并传递给列的第一个值:
s = df1.loc[df1['Data'].iloc[::-1].ne('').idxmax(), 'Data']
print (s)
dfs
df1['Data'] = ''
df1.loc[0, 'Data'] = s
print (df1)
Data
0 dfs
1
2
3
4
5
6
7
8
如果空字符串缺少值:
data1 = [12,34,'fsdf',678,np.nan,np.nan,'dfs',np.nan,np.nan]
df1 = pd.DataFrame(data1, columns= ['Data'])
print(df1)
Data
0 12
1 34
2 fsdf
3 678
4 NaN
5 NaN
6 dfs
7 NaN
8 NaN
s = df1.loc[df1['Data'].iloc[::-1].notna().idxmax(), 'Data']
print (s)
dfs
df1['Data'] = ''
df1.loc[0, 'Data'] = s
print (df1)
Data
0 dfs
1
2
3
4
5
6
7
8
获取最后一个非空字符串值的索引并传递给列的第一个值:
s = df1.loc[df1['Data'].iloc[::-1].ne('').idxmax(), 'Data']
print (s)
dfs
df1['Data'] = ''
df1.loc[0, 'Data'] = s
print (df1)
Data
0 dfs
1
2
3
4
5
6
7
8
如果空字符串缺少值:
data1 = [12,34,'fsdf',678,np.nan,np.nan,'dfs',np.nan,np.nan]
df1 = pd.DataFrame(data1, columns= ['Data'])
print(df1)
Data
0 12
1 34
2 fsdf
3 678
4 NaN
5 NaN
6 dfs
7 NaN
8 NaN
s = df1.loc[df1['Data'].iloc[::-1].notna().idxmax(), 'Data']
print (s)
dfs
df1['Data'] = ''
df1.loc[0, 'Data'] = s
print (df1)
Data
0 dfs
1
2
3
4
5
6
7
8
您可以使用NaN替换,现在使用
或
您可以在此处将fill_值设置为np.nan时使用
您可以使用NaN替换,现在使用
或
您可以在此处将fill_值设置为np.nan时使用
像这样简单的熊猫状况检查会有所帮助
df1['Data'] = [df1.loc[df1['Data'].ne(""), "Data"].iloc[-1]] + [''] * (len(df1) - 1)
像这样简单的熊猫状况检查会有所帮助
df1['Data'] = [df1.loc[df1['Data'].ne(""), "Data"].iloc[-1]] + [''] * (len(df1) - 1)