Pandas 当前名称为 NaT 时如何更改列名称
How to change a column name when the current name is NaT in Pandas
我有一个数据框 df1,其中两列名称为 NaT
Index NaT Nat 2019-01-01 00:00:00
1 A B 1
2 C D 2
如何将 NaT 列的名称更改为 "Name1" 和 "Name2"
Index Name1 Name2 2019-01-01 00:00:00
1 A B 1
2 C D 2
我尝试了以下语句:
df1.rename(columns = {0:'Name1', 1: 'Name2'}) #(doesn't work)
df1.columns.values[0] = 'Name1' #(doesn't work)
df1.columns.values[1] = 'Name2' #(doesn't work)
您可以直接重新分配列的名称:
df1.columns = ['Name1','Name2']
您可以这样使用 set_axis
:
df_out = df.set_axis(['Name1','Name2',df.columns[-1]], axis=1, inplace=False)
df_out
输出:
Name1 Name2 2019-01-03 00:00:00
1 A B 1
2 C D 2
编辑以回答评论,像这样使用 header 列的切片:
df = pd.DataFrame(np.arange(100).reshape(10,-1), columns=[*'ABCDEFGHIJ'])
df = df.set_axis(['Name1']+['Name2']+df.columns[-8:].tolist(), axis=1, inplace=False)
输出:
Name1 Name2 C D E F G H I J
0 0 1 2 3 4 5 6 7 8 9
1 10 11 12 13 14 15 16 17 18 19
2 20 21 22 23 24 25 26 27 28 29
3 30 31 32 33 34 35 36 37 38 39
4 40 41 42 43 44 45 46 47 48 49
5 50 51 52 53 54 55 56 57 58 59
6 60 61 62 63 64 65 66 67 68 69
7 70 71 72 73 74 75 76 77 78 79
8 80 81 82 83 84 85 86 87 88 89
9 90 91 92 93 94 95 96 97 98 99
您可以根据列名称分配新列表 - 首先是原始列表,然后是列表,接下来是从 4. 到最后一列:
df.columns = df.columns[:1].tolist() + ['Name1', 'Name2'] + df.columns[3:].tolist()
print (df)
Index Name1 Name2 2019-01-01 00:00:00
0 1 A B 1
1 2 C D 2
或者,如果第一列是 index
,则重新评估列表中的第 3 列到最后一列:
df.columns = ['Name1', 'Name2'] + df.columns[2:].tolist()
print (df)
Name1 Name2 2019-01-01 00:00:00
Index
1 A B 1
2 C D 2
将您的第一个代码编辑为:
df1.rename(columns = {'NaT':'Name1', 'Nat': 'Name2'})
我遇到了一个问题
df.rename(columns={"NaT": "new_column_name"}, inplace=True)
不起作用,因为列 header NaT 实际上是一个值 (pd.NaT) 而不是字符串。
在这种情况下,以下代码有效。
df.rename(columns={pd.NaT: "new_column_name"}, inplace=True)
我有一个数据框 df1,其中两列名称为 NaT
Index NaT Nat 2019-01-01 00:00:00
1 A B 1
2 C D 2
如何将 NaT 列的名称更改为 "Name1" 和 "Name2"
Index Name1 Name2 2019-01-01 00:00:00
1 A B 1
2 C D 2
我尝试了以下语句:
df1.rename(columns = {0:'Name1', 1: 'Name2'}) #(doesn't work)
df1.columns.values[0] = 'Name1' #(doesn't work)
df1.columns.values[1] = 'Name2' #(doesn't work)
您可以直接重新分配列的名称:
df1.columns = ['Name1','Name2']
您可以这样使用 set_axis
:
df_out = df.set_axis(['Name1','Name2',df.columns[-1]], axis=1, inplace=False)
df_out
输出:
Name1 Name2 2019-01-03 00:00:00
1 A B 1
2 C D 2
编辑以回答评论,像这样使用 header 列的切片:
df = pd.DataFrame(np.arange(100).reshape(10,-1), columns=[*'ABCDEFGHIJ'])
df = df.set_axis(['Name1']+['Name2']+df.columns[-8:].tolist(), axis=1, inplace=False)
输出:
Name1 Name2 C D E F G H I J
0 0 1 2 3 4 5 6 7 8 9
1 10 11 12 13 14 15 16 17 18 19
2 20 21 22 23 24 25 26 27 28 29
3 30 31 32 33 34 35 36 37 38 39
4 40 41 42 43 44 45 46 47 48 49
5 50 51 52 53 54 55 56 57 58 59
6 60 61 62 63 64 65 66 67 68 69
7 70 71 72 73 74 75 76 77 78 79
8 80 81 82 83 84 85 86 87 88 89
9 90 91 92 93 94 95 96 97 98 99
您可以根据列名称分配新列表 - 首先是原始列表,然后是列表,接下来是从 4. 到最后一列:
df.columns = df.columns[:1].tolist() + ['Name1', 'Name2'] + df.columns[3:].tolist()
print (df)
Index Name1 Name2 2019-01-01 00:00:00
0 1 A B 1
1 2 C D 2
或者,如果第一列是 index
,则重新评估列表中的第 3 列到最后一列:
df.columns = ['Name1', 'Name2'] + df.columns[2:].tolist()
print (df)
Name1 Name2 2019-01-01 00:00:00
Index
1 A B 1
2 C D 2
将您的第一个代码编辑为:
df1.rename(columns = {'NaT':'Name1', 'Nat': 'Name2'})
我遇到了一个问题
df.rename(columns={"NaT": "new_column_name"}, inplace=True)
不起作用,因为列 header NaT 实际上是一个值 (pd.NaT) 而不是字符串。
在这种情况下,以下代码有效。
df.rename(columns={pd.NaT: "new_column_name"}, inplace=True)