Что Ваш опыт разрабатывает на Google App Engine?

Без однозначного разделителя это не тривиально, поскольку у вас есть оба пробела в именах, несколько длин имен (2 слова, 3 слова) и конечный столбец, который также может иметь несколько слов с пробелами.

Разделив строку, вы можете получить это частичное решение:

df['data2'] = df['data1'].str.split(': ').str[-1]

>>> print(df)

                                          data1                           data2
0     info  name: Michael Jackson      New York   Michael Jackson      New York
1  info 12 name: Michael Jordan III Los Angeles  Michael Jordan III Los Angeles

Если бы у вас был список «городов», вы могли бы выполнить полное решение:

def replace(string, substitutions):
    """Replaces multiple substrings in a string."""
    substrings = sorted(substitutions, key=len, reverse=True)
    regex = re.compile('|'.join(map(re.escape, substrings)))
    return regex.sub(lambda match: substitutions[match.group(0)], string)

# List of cities to remove from strings
cities = ['New York', 'Los Angeles']
# Dictionary matching each city with the empty string
substitutions = {city:'' for city in cities}

# Splitting to create new column as above
df['data2'] = df['data1'].str.split(': ').str[-1]
# Applying replacements to new column
df['data2'] = df['data2'].map(lambda x: replace(x, substitutions).strip())

>>>print(df)

                                          data1               data2
0     info  name: Michael Jackson      New York     Michael Jackson
1  info 12 name: Michael Jordan III Los Angeles  Michael Jordan III

Кредит Карлсмит для функции замены.

7
задан Richard Levasseur 1 April 2009 в 03:27
поделиться

6 ответов

Самой явной и расстраивающей проблемой является API хранилища данных, который выглядит большим и очень хорошо продуман и легок работать с тем, если Вы привыкли к SQL, но имеет 1 000 пределов строки через все наборы результатов запроса, и Вы не можете получить доступ к количествам или смещениям кроме того. Я столкнулся с более странными проблемами, с не на самом деле способность добавить или получить доступ к данным для модели, после того как это идет вне 1 000 строк.

Посмотрите дискуссию Переполнения стека о 1 000 пределов строки

Балканское Аральское море записало действительно хорошую сводку этого и других проблем

Однако механизм приложения является действительно большим инструментом, чтобы иметь в распоряжении, и я действительно люблю работать с ним. Это идеально подходит для развертывания микро веб-сервисов (например: API json) для использования в других приложениях.

4
ответ дан 6 December 2019 в 08:17
поделиться

GQL чрезвычайно прост - это - подмножество оператора 'SELECT' SQL, ничто больше. Это - только слой удобства поверх API низшего уровня, тем не менее, и весь парсинг сделан в Python.

Вместо этого я рекомендую использовать Запрос API, который является процедурным, не требует никакого парсинга во время выполнения и делает 'уязвимости' инжекции GQL полностью невозможными (хотя они невозможны в правильно записанном GQL так или иначе). Запрос API очень прост: Назовите .all () на Образцовом классе или дб вызова. Запрос (modelname). Объект Запроса имеет .filter (field_and_operator, значение), .order (field_and_direction) и .ancestor (объект) методы, в дополнение ко всем средствам, которые объекты GQL имеют (.get (), .fetch (), .count ()), и т.д.), каждый из Методов запроса возвращает сам объект Запроса для удобства, таким образом, можно объединить их в цепочку:

результаты = MyModel.all () .filter ("нечто = ", 5) .order (" - панель") .fetch (10)

Эквивалентно:

результаты = MyModel.gql ("ГДЕ нечто = 5 панелей ORDER BY ПРЕДЕЛ DESC 10") .fetch ()

4
ответ дан 6 December 2019 в 08:17
поделиться

Главная оборотная сторона, когда работа с AppEngine была пределом запроса 1k, который уже был упомянут в комментариях. Что я не видел упомянутый, хотя то, что существует встроенный поддающийся сортировке порядок, с которым можно работать вокруг этой проблемы. Из appengine поваренной книги:

def deepFetch(queryGen,key=None,batchSize = 100):
  """Iterator that yields an entity in batches.

  Args:
    queryGen: should return a Query object
    key: used to .filter() for __key__
    batchSize: how many entities to retrieve in one datastore call

  Retrieved from http://tinyurl.com/d887ll (AppEngine cookbook).
  """

  from google.appengine.ext import db

   # AppEngine will not fetch more than 1000 results
  batchSize = min(batchSize,1000)

  query = None
  done = False
  count = 0

  if key:
    key = db.Key(key)

  while not done:
    print count
    query = queryGen()
    if key:
      query.filter("__key__ > ",key)
    results = query.fetch(batchSize)
    for result in results:
      count += 1
      yield result
    if batchSize > len(results):
      done = True
    else:
      key = results[-1].key()

Вышеупомянутый код вместе с Удаленным API (см. эту статью) позволяет Вам получать столько объектов, сколько Вам нужно.

Можно использовать вышеупомянутый код как это:

def allMyModel():
  q = MyModel.all()

myModels = deepFetch(allMyModel)
4
ответ дан 6 December 2019 в 08:17
поделиться

Механизм Приложения Google не использует фактическую базу данных и по-видимому использует своего рода распределенную карту хеша. Это предоставит себя некоторым различным поведениям, которые люди, которые приучены к SQL просто, не собираются видеть сначала. Таким образом, например, получение КОЛИЧЕСТВА объектов в регулярном SQL, как ожидают, будет быстрой операцией, но с GQL это просто не собирается работать тот же путь.

Вот еще некоторые проблемы:

http://blog.burnayev.com/2008/04/gql-limitations.html

В моем личном опыте это - корректировка, но кривая обучения прекрасна.

1
ответ дан 6 December 2019 в 08:17
поделиться

Сначала у меня был тот же опыт как другие, которые перешли от SQL до GQL - довольно странный, чтобы не смочь сделать СОЕДИНЕНИЯ, считать больше чем 1 000 строк, и т.д. Теперь, когда я работал с ним в течение нескольких месяцев, я абсолютно люблю механизм приложения. Я портирую все свои старые проекты на него.

Я использую его для хостинга нескольких веб-приложений интенсивного трафика (в пиковое время, которое получает один из них, 50k поражает минуту.)

2
ответ дан 6 December 2019 в 08:17
поделиться

У меня был отличный опыт работы с движком приложений Google, и ограничение результатов 1000 было удалено , вот ссылка на примечания к выпуску:

выпуск движка приложения примечания

Не более 1000 результатов - это верно: с добавлением курсоров и кульминацией множества небольших улучшений стабильности и производительности хранилища данных по сравнению с в последние несколько месяцев теперь мы достаточно уверены в том, что полностью удалили ограничение максимального результата. Выполняете ли вы выборку, итерацию или используете Курсор, нет ограничений на количество результатов.

7
ответ дан 6 December 2019 в 08:17
поделиться
Другие вопросы по тегам:

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