එක් පේළියක් හෝ නල මාර්ග විසඳුම්
මම කරුණු දෙකක් කෙරෙහි අවධානය යොමු කරමි:
OP පැහැදිලිව සඳහන් කරයි
මා විසින් සංස්කරණය කරන ලද තීරු නම් ලැයිස්තුවක් තුළ ගබඩා කර ඇත, නමුත් තීරු නම් ආදේශ කරන්නේ කෙසේදැයි මම නොදනිමි.
'$'
එක් එක් තීරු ශීර්ෂයේ පළමු අක්ෂරය ප්රතිස්ථාපනය කරන්නේ හෝ ඉවත් කරන්නේ කෙසේද යන ගැටළුව විසඳීමට මට අවශ්ය නැත . OP දැනටමත් මෙම පියවර කර ඇත. ඒ වෙනුවට මට අවශ්ය වන්නේ පවතින columns
වස්තුව ප්රතිස්ථාපනය කිරීම සඳහා නව තීරු නාම ලැයිස්තුවක් ලබා දීමයි .
df.columns = new
එහිදී new
නව තීරු නම් ලැයිස්තුව එය ලැබෙන ලෙස සරල ලෙස වේ. මෙම ප්රවේශයේ ඇති අඩුපාඩුව නම්, දැනට පවතින දත්ත රාමුවේ columns
ගුණාංගය සංස්කරණය කිරීම අවශ්ය වන අතර එය පේළියේ සිදු නොකෙරේ. පවතින දත්ත රාමුව සංස්කරණය නොකර නල මාර්ගයෙන් මෙය සිදු කිරීමට ක්රම කිහිපයක් මම පෙන්වන්නම්.
සැකසුම 1
කලින් පවතින ලැයිස්තුවක් සමඟ ප්රතිස්ථාපන තීරු නම් නැවත නම් කිරීමේ අවශ්යතාව කෙරෙහි අවධානය යොමු කිරීම සඳහා, මම df
ආරම්භක තීරු නම් සහ සම්බන්ධ නොවූ නව තීරු නම් සහිත නව නියැදි දත්ත රාමුවක් සාදමි .
df = pd.DataFrame({'Jack': [1, 2], 'Mahesh': [3, 4], 'Xin': [5, 6]})
new = ['x098', 'y765', 'z432']
df
Jack Mahesh Xin
0 1 3 5
1 2 4 6
විසඳුම 1
pd.DataFrame.rename
බව දැනටමත් ප්රකාශ කර තිබේ නම්, ඔබට නව තීරුව නම් කිරීමට පැරණි තීරුව නම් සිතියම් ශබ්දකෝෂ විය, ඔබ භාවිතා කළ හැකි pd.DataFrame.rename
.
d = {'Jack': 'x098', 'Mahesh': 'y765', 'Xin': 'z432'}
df.rename(columns=d)
x098 y765 z432
0 1 3 5
1 2 4 6
කෙසේ වෙතත්, ඔබට පහසුවෙන් එම ශබ්ද කෝෂය නිර්මාණය කර එය ඇමතුමට ඇතුළත් කළ rename
හැකිය. පහත දැක්වෙන්නේ නැවත නැවත කියවීමේදී df
, අපි එක් එක් තීරුවේ නම හරහා නැවත යෙදීමයි.
# given just a list of new column names
df.rename(columns=dict(zip(df, new)))
x098 y765 z432
0 1 3 5
1 2 4 6
ඔබගේ මුල් තීරු නම් අද්විතීය නම් මෙය විශිෂ්ට ලෙස ක්රියා කරයි. නමුත් ඔවුන් එසේ නොවේ නම් මෙය බිඳ වැටේ.
අද්විතීය නොවන තීරු 2 ක් සකසන්න
df = pd.DataFrame(
[[1, 3, 5], [2, 4, 6]],
columns=['Mahesh', 'Mahesh', 'Xin']
)
new = ['x098', 'y765', 'z432']
df
Mahesh Mahesh Xin
0 1 3 5
1 2 4 6
විසඳුම 2 තර්කය
pd.concat
භාවිතා කරමින්keys
පළමුව, අපි විසඳුම 1 භාවිතා කිරීමට උත්සාහ කරන විට කුමක් සිදුවේදැයි බලන්න:
df.rename(columns=dict(zip(df, new)))
y765 y765 z432
0 1 3 5
1 2 4 6
අපි new
ලැයිස්තුව තීරු නම් ලෙස සිතියම් ගත කළේ නැත . අපි නැවත නැවත y765
පැවසුවා. ඒ වෙනුවට, අපට තීරු හරහා පුනරාවර්තනය keys
වන අතර pd.concat
ශ්රිතයේ තර්කය භාවිතා කළ හැකිය df
.
pd.concat([c for _, c in df.items()], axis=1, keys=new)
x098 y765 z432
0 1 3 5
1 2 4 6
විසඳුම 3
නැවත සකස් කිරීම. මෙය භාවිතා කළ යුත්තේ ඔබට dtype
සියලු තීරු සඳහා තනි එකක් තිබේ නම් පමණි . එසේ නොමැතිනම්, ඔබ dtype
object
සියලු තීරු සඳහා අවසන් වන අතර ඒවා නැවත පරිවර්තනය කිරීම සඳහා තවත් ශබ්ද කෝෂ වැඩ අවශ්ය වේ.
තනි dtype
pd.DataFrame(df.values, df.index, new)
x098 y765 z432
0 1 3 5
1 2 4 6
මිශ්ර dtype
pd.DataFrame(df.values, df.index, new).astype(dict(zip(new, df.dtypes)))
x098 y765 z432
0 1 3 5
1 2 4 6
විසඳුම 4
මෙය transpose
සහ සමඟ විහිලු උපක්රමයකි set_index
. pd.DataFrame.set_index
දර්ශක පේළියක් සැකසීමට අපට ඉඩ දෙයි, නමුත් ඊට අනුරූප නොවේ set_columns
. එබැවින් අපට සම්ප්රේෂණය කළ හැකිය, එසේ නම් set_index
, ආපසු මාරු කළ හැකිය . කෙසේ වෙතත්, එකම තනි dtype
එදිරිව මිශ්රdtype
3 වන ද්රාවණයෙන් අවවාද මෙහි අදාළ වේ.
තනි dtype
df.T.set_index(np.asarray(new)).T
x098 y765 z432
0 1 3 5
1 2 4 6
මිශ්ර dtype
df.T.set_index(np.asarray(new)).T.astype(dict(zip(new, df.dtypes)))
x098 y765 z432
0 1 3 5
1 2 4 6
විසඳුම 5 හි එක් එක් මූලද්රව්යය හරහා එම චක්රයන්හි
a භාවිතා කරන්න.
මෙම ද්රාවණය තුළ, අපි ලැම්බඩා එකක් පසුකර එය නොසලකා හරිමු. එය ද ගත වන නමුත් එය අපේක්ෂා නොකරයි. ඒ වෙනුවට, ඉරේටරයක් පෙරනිමි අගයක් ලෙස ලබා දී ඇති අතර, පසුව එහි වටිනාකම කුමක් දැයි නොසලකා එක වරකට එක හරහා චක්රීය කිරීමට මට එය භාවිතා කළ හැකිය .lambda
pd.DataFrame.rename
new
x
y
x
df.rename(columns=lambda x, y=iter(new): next(y))
x098 y765 z432
0 1 3 5
1 2 4 6
සොපයිතන් චැට් වල සිටින පුද්ගලයින් විසින් මට පෙන්වා දුන් පරිදි , මම *
අතරට එකතු කළහොත් x
සහ y
මගේ y
විචල්යය ආරක්ෂා කළ හැකිය . මෙම සන්දර්භය තුළ එය ආරක්ෂා කිරීම අවශ්ය යැයි මම විශ්වාස නොකරමි. එය තවමත් සඳහන් කිරීම වටී.
df.rename(columns=lambda x, *, y=iter(new): next(y))
x098 y765 z432
0 1 3 5
1 2 4 6