Строка формата к случаю заголовка

Чтобы добавить к этому известному вопросу (хотя и слишком поздно): вы также можете сделать df.groupby('column_name').get_group('column_desired_value').reset_index(), чтобы создать новый фрейм данных с указанным столбцом, имеющим определенное значение. Например,

import pandas as pd
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
                   'B': 'one one two three two two one three'.split()})
print("Original dataframe:")
print(df)

b_is_two_dataframe = pd.DataFrame(df.groupby('B').get_group('two').reset_index()).drop('index', axis = 1) 
#NOTE: the final drop is to remove the extra index column returned by groupby object
print('Sub dataframe where B is two:')
print(b_is_two_dataframe)

Запустите это:

Original dataframe:
     A      B
0  foo    one
1  bar    one
2  foo    two
3  bar  three
4  foo    two
5  bar    two
6  foo    one
7  foo  three
Sub dataframe where B is two:
     A    B
0  foo  two
1  foo  two
2  bar  two
25
задан AndroidMechanic - Viral Patel 2 January 2016 в 15:40
поделиться

14 ответов

Вот является решение для Perl http://daringfireball.net/2008/05/title_case

Вот является решение Ruby http://frankschmitt.org/projects/title-case

Вот решение остроты Ruby: http://snippets.dzone.com/posts/show/4702

'some string here'.gsub(/\b\w/){$&.upcase}

То, что делает острота, использует замену регулярного выражения первого символа каждого слова с прописной версией ее.

10
ответ дан brian d foy 28 November 2019 в 17:55
поделиться

Вот простой статический метод сделать это в C#:

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
16
ответ дан tags2k 28 November 2019 в 17:55
поделиться

С жемчугом Вы могли сделать это:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
-1
ответ дан Michael Mrozek 28 November 2019 в 17:55
поделиться

Здесь у Вас есть версия C++. Это имеет ряд не uppercaseable слова как prononuns и предлоги. Однако я не рекомендовал бы автоматизировать этот процесс, если необходимо иметь дело с важными текстами.

#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <set>

using namespace std;

typedef vector<pair<string, int> > subDivision;
set<string> nonUpperCaseAble;

subDivision split(string & cadena, string delim = " "){
    subDivision retorno;
    int pos, inic = 0;
    while((pos = cadena.find_first_of(delim, inic)) != cadena.npos){
        if(pos-inic > 0){
            retorno.push_back(make_pair(cadena.substr(inic, pos-inic), inic));
        }
        inic = pos+1;
    }
    if(inic != cadena.length()){
        retorno.push_back(make_pair(cadena.substr(inic, cadena.length() - inic), inic));
    }
    return retorno;
}

string firstUpper (string & pal){
    pal[0] = toupper(pal[0]);
    return pal;
}

int main()
{
    nonUpperCaseAble.insert("the");
    nonUpperCaseAble.insert("of");
    nonUpperCaseAble.insert("in");
    // ...

    string linea, resultado;
    cout << "Type the line you want to convert: " << endl;
    getline(cin, linea);

    subDivision trozos = split(linea);
    for(int i = 0; i < trozos.size(); i++){
        if(trozos[i].second == 0)
        {
            resultado += firstUpper(trozos[i].first);
        }
        else if (linea[trozos[i].second-1] == ' ')
        {
            if(nonUpperCaseAble.find(trozos[i].first) == nonUpperCaseAble.end())
            {
                resultado += " " + firstUpper(trozos[i].first);
            }else{
                resultado += " " + trozos[i].first;
            }
        }
        else
        {
            resultado += trozos[i].first;
        }       
    }

    cout << resultado << endl;
    getchar();
    return 0;
}
-1
ответ дан 28 November 2019 в 17:55
поделиться

Не используя готовую функцию, суперпростой алгоритм низкого уровня для преобразования строки в случай заголовка:


convert first character to uppercase.
for each character in string,
    if the previous character is whitespace,
        convert character to uppercase.

Это принимает, "преобразовывают символ в верхний регистр", сделает это правильно независимо от того, чувствителен ли символ к регистру (например, '+').

-1
ответ дан Rudd Zwolinski 28 November 2019 в 17:55
поделиться

В какой язык?

В PHP это:

ucwords ()

пример:

$HelloWorld = ucwords('hello world');
5
ответ дан cmcculloh 28 November 2019 в 17:55
поделиться

Если язык, который Вы используете, имеет поддерживаемый метод/функцию, тогда просто используют это (в качестве в методе C# ToTitleCase)

, Если это не сделает, то Вы захотите сделать что-то как следующее:

  1. Read в строке
  2. Берет первый Word
  3. , Используют для своей выгоды первую букву того слова <глоток> 1
  4. Продвигаются и находят, что следующий Word
  5. Переходит в 3, если не в конце строки, иначе выйдите

<глоток> 1 Для превращения в капитал его в, скажем, C - используют эти коды ASCII , чтобы найти целочисленное значение символа и вычесть 32 из него.

должно было бы быть намного больше проверки ошибок в коде (гарантирующий допустимые буквы и т.д.), и "Использовать для своей выгоды" функция должна будет наложить своего рода "схему случая заголовка" на буквы для проверки на слова, которые не должны быть capatilised ('и', 'но' и т.д. Здесь хорошая схема)

5
ответ дан Michael Mrozek 28 November 2019 в 17:55
поделиться

В Perl:

$string =~ s/(\w+)/\u\L$1/g;

Это находится даже в FAQ.

5
ответ дан Randal Schwartz 28 November 2019 в 17:55
поделиться

К capatilise это в, скажем, C - использует коды ASCII ( http://www.asciitable.com/ ), чтобы найти целочисленное значение символа и вычесть 32 из него.

Это - плохое решение, если Вы когда-нибудь планируете принять символы вне a-z и A-Z.

, Например: ASCII 134: ГҐ, ASCII 143: Г ….
Используя арифметику получает Вас: ASCII 102: вызовы библиотеки f

Use, не предполагайте, что можно использовать целочисленную арифметику на символах для возвращения чего-то полезного. Unicode хитер .

8
ответ дан Bill 28 November 2019 в 17:55
поделиться

Я опасался бы автоматически upcasing всего whitespace-preceded-words в сценариях, где я рискну притягивать ярость педантов.

я, по крайней мере, рассмотрел бы реализацию словаря для случаев исключения как статьи и соединения. Созерцайте:

"Красавица и чудовище"

И когда дело доходит до имен собственных, вещь становится намного более ужасной.

13
ответ дан Ishmaeel 28 November 2019 в 17:55
поделиться

Я думаю, что использование CultureInfo не всегда надежно, это простой и удобный способ манипулировать строкой вручную:

string sourceName = txtTextBox.Text.ToLower();
string destinationName = sourceName[0].ToUpper();

for (int i = 0; i < (sourceName.Length - 1); i++) {
  if (sourceName[i + 1] == "")  {
    destinationName += sourceName[i + 1];
  }
  else {
    destinationName += sourceName[i + 1];
  }
}
txtTextBox.Text = desinationName;
1
ответ дан 28 November 2019 в 17:55
поделиться

В Silverlight нет ToTitleCase в классе TextInfo .

Вот простой способ, основанный на регулярных выражениях.

Примечание. Silverlight не имеет предварительно скомпилированных регулярных выражений, но для меня эта потеря производительности не является проблемой.

    public string TitleCase(string str)
    {
        return Regex.Replace(str, @"\w+", (m) =>
        {
            string tmp = m.Value;
            return char.ToUpper(tmp[0]) + tmp.Substring(1, tmp.Length - 1).ToLower();
        });
    }
6
ответ дан 28 November 2019 в 17:55
поделиться

В Excel есть встроенная формула PROPER (n) .

Был очень доволен, увидев, что мне не пришлось писать это самому!

1
ответ дан 28 November 2019 в 17:55
поделиться

http://titlecase.com/ имеет API

2
ответ дан 28 November 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: