我有一個列名如下的資料檔案(名稱中的數字從 1 到 32):

| 入口左細胞-10<stl-unit=m>-印記) | 入口左細胞-11<stl-unit=m>-印記) | 入口左細胞-12<stl-unit=m>-印記) | -------- | entry_left_cell-9<stl-unit=m>-印記) |
|---|---|---|---|---|
| 資料 | 資料 | 資料 | 資料 | 資料 |
| 資料 | 資料 | 資料 | 資料 | 資料 |
| …… | …… | ... | ... | …… |
我想根據列中的數字在python中從左到右對列(帶有資料)進行排序。我需要根據列名中的數字移動一整列。
所以xxx-1xxx、xxx-2xx、xxx-3xxx、……xxx-32xxx
| 入口左細胞-1<stl-unit=m>-印記) | entry_left_cell-2<stl-unit=m>-印記) | entry_left_cell-3<stl-unit=m>-印記) | -------- | 入口左細胞-32<stl-unit=m>-印記) |
|---|---|---|---|---|
| 資料 | 資料 | 資料 | 資料 | 資料 |
| 資料 | 資料 | 資料 | 資料 | 資料 |
| …… | …… | ... | ... | …… |
有沒有辦法在 python 中做到這一點?謝謝。
uj5u.com熱心網友回復:
這是解決方案
# Some random data
data = np.random.randint(1,10, size=(100,32))
# Setting up column names as given in your problem randomly ordered
columns = [f'inlet_left_cell-{x}<stl-unit=m>-imprint)' for x in range(1,33)]
np.random.shuffle(columns)
# Creating the dataframe
df = pd.DataFrame(data, columns=columns)
df.head()

# Sorting the columns in required order
col_nums = [int(x.split('-')[1].split('<')[0]) for x in df.columns]
column_map = dict(zip(col_nums, df.columns))
df = df[[column_map[i] for i in range(1,33)]]
df.head()

uj5u.com熱心網友回復:
有很多方法可以做到...我只是簡單地發布。
- 只需提取列名并使用
natsort.
假設Dataframe名稱為df..
from natsort import natsorted, ns
dfl=list(df) #used to convert column names to list
dfl=natsorted(dfl, alg=ns.IGNORECASE) # sort based on subtsring numbers
df_sorted= df[dfl] #Re arrange Df
print(df_sorted)
uj5u.com熱心網友回復:
如果列名僅相差此數字,請嘗試以下操作:
import pandas as pd
data = pd.read_excel("D:\\..\\file_name.xlsx")
data = data.reindex(sorted(data.columns), axis=1)
例如:
data = pd.DataFrame(columns=["inlet_left_cell-23<stl-unit=m>-imprint)", "inlet_left_cell-47<stl-unit=m>-imprint)", "inlet_left_cell-10<stl-unit=m>-imprint)", "inlet_left_cell-12<stl-unit=m>-imprint)"])
print(data)
入口左單元-23<stl-unit=m>-imprint)入口左單元47<stl-unit=m>-imprint)入口左單元10<stl-unit=m>-imprint)入口左單元12<stl-unit=m>-印記)
在這之后:
data = data.reindex(sorted(data.columns), axis=1)
print(data)
入口左單元-10<stl-unit=m>-imprint)入口左單元12<stl-unit=m>-imprint)入口左單元23<stl-unit=m>-imprint)入口左單元47<stl-unit=m>-印記)
???
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/525773.html
標籤:Python熊猫数据框
