Если строка в столбце содержит слово [duplicate]

Я предлагаю вам загружать данные во временную таблицу, а затем использовать INSERT ... SELECT ... ON DUPLICATE KEY UPDATE; например:

CREATE TEMPORARY TABLE temptable (
  id  INT UNSIGNED NOT NULL,
  val INT,
  PRIMARY KEY (id)
) ENGINE = MEMORY;

LOAD DATA LOCAL INFILE '/path/to/file.txt' INTO temptable FIELDS TERMINATED BY ',';

INSERT INTO my_table
SELECT id, val FROM temptable
ON DUPLICATE KEY UPDATE val = VALUES(val);

DROP TEMPORARY TABLE temptable;
212
задан piRSquared 5 January 2017 в 00:46
поделиться

8 ответов

import pandas as pd
k=pd.DataFrame(['hello','doubt','hero','help'])
k.columns=['some_thing']
t=k[k['some_thing'].str.contains("hel")]
d=k.replace(t,'CS')

::: OUTPUT :::

k
Out[95]: 
   some_thing
0  hello
1  doubt
2  hero
3   help

t
Out[99]: 
   some_thing
0  hello
3   help

d
Out[96]: 
    some_thing
0     CS
1  doubt
2  hero
3     CS
5
ответ дан Ayush Gupta 16 August 2018 в 02:10
поделиться

Быстрое примечание: если вы хотите сделать выбор на основе частичной строки, содержащейся в индексе, попробуйте следующее:

df['stridx']=df.index
df[df['stridx'].str.contains("Hello|Britain")]
24
ответ дан Christian 16 August 2018 в 02:10
поделиться
  • 1
    Вы можете просто df [df.index.to_series (). Str.contains ('LLChit')] – Yury Bayda 8 May 2015 в 21:27

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

def stringSearchColumn_DataFrame(df, colName, regex):
    newdf = DataFrame()
    for idx, record in df[colName].iteritems():

        if re.search(regex, record):
            newdf = concat([df[df[colName] == record], newdf], ignore_index=True)

    return newdf
7
ответ дан euforia 16 August 2018 в 02:10
поделиться
  • 1
    Должно быть 2x-3x быстрее, если вы компилируете регулярное выражение перед циклом: regex = re.compile (regex), а затем, если regex.search (запись) – MarkokraM 10 April 2014 в 14:56
  • 2
    @MarkokraM docs.python.org/3.6/library/re.html#re.compile говорит, что самые последние регулярные выражения кэшируются для вас, поэтому вам не нужно компилировать себя. – Teepeemm 20 June 2018 в 19:36

Основываясь на проблеме github # 620 , похоже, что вы скоро сможете сделать следующее:

df[df['A'].str.contains("hello")]

Обновление: векторизованные строковые методы ( т.е. Series.str) доступны в pandas 0.8.1 и выше.

415
ответ дан hlin117 16 August 2018 в 02:10
поделиться
  • 1
    Это реализовано сейчас – Wes McKinney 8 August 2012 в 02:57
  • 2
    Как мы идем «Hello & quot; и "Британия" если я хочу найти их с "OR" состояние. – LonelySoul 27 June 2013 в 17:41
  • 3
    Поскольку методы str. * Обрабатывают шаблон ввода как регулярное выражение, вы можете использовать df[df['A'].str.contains("Hello|Britain")] – Garrett 27 June 2013 в 20:20
  • 4
    Можно ли преобразовать .str.contains в использование .query() api ? – zyxue 1 March 2017 в 18:25
  • 5
    – Franck Dernoncourt 5 July 2017 в 18:01
  • 6
    df[df['value'].astype(str).str.contains('1234.+')] для фильтрации столбцов без строкового типа. – François Leblanc 13 February 2018 в 21:22

Как вы отфильтровываете «свободу», кроме как с такими критериями, как «наследие», «ulic» и т. д.

   df_Fixed[~df_Fixed["Busler Group"].map(lambda x: x.startswith('Liberty'))]
0
ответ дан jjaredrides 16 August 2018 в 02:10
поделиться

Скажите, что у вас есть DataFrame:

>>> df = pd.DataFrame([['hello', 'hello world'], ['abcd', 'defg']], columns=['a','b'])
>>> df
       a            b
0  hello  hello world
1   abcd         defg

Вы всегда можете использовать оператор in в выражении лямбда для создания вашего фильтра.

>>> df.apply(lambda x: x['a'] in x['b'], axis=1)
0     True
1    False
dtype: bool

Трюк здесь состоит в том, чтобы использовать опцию axis=1 в apply для передачи элементов в функцию лямбда по строке, в отличие от столбца по столбцу.

20
ответ дан Mike 16 August 2018 в 02:10
поделиться
  • 1
    Как изменить выше, чтобы сказать, что x ['a'] существует только в начале x ['b']? – ComplexData 18 October 2016 в 20:23

Я использую pandas 0.14.1 на macos в ноутбуке ipython. Я попробовал предложенную строку выше:

df[df['A'].str.contains("Hello|Britain")]

и получил ошибку:

"cannot index with vector containing NA / NaN values"

, но она отлично работала, когда было добавлено условие «== Истина», например:

df[df['A'].str.contains("Hello|Britain")==True]
109
ответ дан sharon 16 August 2018 в 02:10
поделиться
  • 1
    Или вы можете сделать: df [df ['A']. Str.contains («Hello | UK», na = False)] – joshlk 2 July 2015 в 14:00

Если кто-нибудь задается вопросом, как выполнить связанную проблему: «Выбрать столбец частичной строкой»

Использовать:

df.filter(like='hello')  # select columns which contain the word hello

И выбирать строки путем частичного совпадения строк, передать axis=0 для фильтрации:

# selects rows which contain the word hello in their index label
df.filter(like='hello', axis=0)  
24
ответ дан user2285236 16 August 2018 в 02:10
поделиться
  • 1
    Это можно отделить до: df.loc[:, df.columns.str.contains('a')] – pshep123 17 June 2017 в 21:53
  • 2
    который может быть далее дистиллирован до df.filter(like='a') – Ted Petrou 25 October 2017 в 02:57
Другие вопросы по тегам:

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