Еще один способ заменить исходные метки столбцов - удалить ненужные символы (здесь '$') из исходных ярлыков столбца.
Это могло быть сделано путем запуска цикла for по df. столбцы и добавление разделенных столбцов в df.columns.
Вместо этого мы можем сделать это аккуратно в одном выражении, используя понимание списка, как показано ниже:
df.columns = [col.strip('$') for col in df.columns]
(strip
метод в Python передает данный символ из начала и конца строки.)
Оператор -split
использует строку для разделения, вместо chararray like Split()
:
$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0"
$separator = "<<>>"
$string -split $separator
5637144576, messag<>est
5637145326, 1
5637145328, 0
Если вы хотите использовать метод Split()
со строкой, вам понадобится $seperator
быть строковым символом с одним элементом, а также указать значение stringsplitoptions. Вы можете увидеть это, проверив его определение:
$string.Split
OverloadDefinitions
-------------------
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
#This one
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)
$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0"
$separator = [string[]]@("<<>>")
$string.Split($separator, [System.StringSplitOptions]::RemoveEmptyEntries)
5637144576, messag<>est
5637145326, 1
5637145328, 0
EDIT: Как отметил @RomanKuzmin, -split
по умолчанию использует шаблоны регулярных выражений. Поэтому имейте в виду избежать специальных символов (например, .
, которые в регулярном выражении являются «любым символом»). Вы также можете заставить simplematch
отключить регулярное выражение, например:
$separator = "<<>>"
$string -split $separator, 0, "simplematch"
Подробнее о -split
здесь .
Необходимо следующее:
$string -Split $separator
Это дает:
5637144576, messag<>est
5637145326, 1
5637145328, 0
Вместо использования метода Split
вы можете использовать оператор split
. Таким образом, ваш код будет выглядеть следующим образом:
$string -split '<<>>'
Иногда PowerShell выглядит точно так же, как на C # и в других, хорошо знаете ...
Его также можно использовать таким образом:
# A dummy text file
$text = @'
abc=3135066977,8701416400
def=8763026853,6433607660
xyz=3135066977,9878763344
'@ -split [Environment]::NewLine,[StringSplitOptions]"RemoveEmptyEntries"
"`nBefore `n------`n"
$text
"`nAfter `n-----`n"
# Do whatever with this
foreach ($line in $text)
{
$line.Replace("3135066977","6660985845")
}